How to redo a migration on django 1.8 after using --fake

Fernando Freitas Alves picture Fernando Freitas Alves · Jun 3, 2015 · Viewed 39k times · Source

Something went wrong on my migrations, I added a new datetimefield to a model then I used makemigrations and migrate.

python manage.py makemigrations
python manage.py migrate

But after this the migrate got an "table already exists error". I supposed I could fake the migrations and start over, so I did

python manage.py makemigrations --fake core

Operations to perform:
  Apply all migrations: core
Running migrations:
  Rendering model states... DONE
  Applying core.0001_initial... FAKED
  Applying core.0002_auto_20150525_1331... FAKED
  Applying core.0003_auto_20150525_1348... FAKED
  Applying core.0004_processo_data_atualizacao... FAKED

but the new migrate that I've just created was faked too (of course!).

How is the proper way to redo a migration (in this case the core.0004) after doing this?

Answer

Spc_555 picture Spc_555 · Jun 3, 2015

You should first set your current state to 0003 with --fake (assuming 0003 is the last migration you really have applied):

python manage.py migrate --fake core 0003

And then proceed as usual:

python manage.py migrate core

Relevant documentation: https://docs.djangoproject.com/en/dev/ref/django-admin/#migrate