First, I am asking about Django migration introduced in 1.7, not south
.
Suppose I have migrations 001_add_field_x
, 002_add_field_y
, and both of them are applied to database. Now I change my mind and decide to revert the second migration and replace it with another migration 003_add_field_z
.
In other words, I want to apply 001 and 003, skipping 002, how can I do this?
P.S. I know I can migrate backwards to 001, but after I make the 003 migration and execute migrate command, 001 through 003 will all be applied, right?
You can use the --fake
option.
Once you revert to 0001
you can run
python manage.py migrate <app> 0002 --fake
and then run
python manage.py migrate <app> #Optionally specify 0003 explicitly
which would apply only 0003
in this case.
If you do not want to follow this process for all the environment/other developers, you can just remove the migration files, and run a new makemigration
, and commit that file - and yes, do run migrate
with the --fake
option
docs: https://docs.djangoproject.com/en/3.1/ref/django-admin/#cmdoption-migrate-fake