48

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?

Fernando Freitas Alves
  • 3,709
  • 3
  • 26
  • 45
  • 1
    In south it was possible to pass a specific step you wanted to migrate to. It would then migrate forward or backwards, to just after the given step. Was that feature dropped when they merged it into Django? – spectras Jun 03 '15 at 17:36
  • @spectras no it wasn't, it's exactly the same – Spc_555 Jun 03 '15 at 17:38

1 Answers1

100

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

Spc_555
  • 4,081
  • 2
  • 27
  • 34