Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I skip a migration with Django migrate command?

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?

like image 502
NeoWang Avatar asked Jul 12 '15 15:07

NeoWang


People also ask

What migrate command does in Django?

migrate executes those SQL commands in the database file. So after executing migrate all the tables of your installed apps are created in your database file. You can confirm this by installing SQLite browser and opening db.


1 Answers

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

like image 134
karthikr Avatar answered Sep 28 '22 13:09

karthikr