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

1

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?

Crematory answered 3/6, 2015 at 17:30 Comment(2)
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?Metallophone
@Metallophone no it wasn't, it's exactly the sameFlexuous
F
101

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

Flexuous answered 3/6, 2015 at 17:38 Comment(5)
what if it was the first migration that I used --fake on?Strobotron
@EvyatarSivan you should use zero instead of migration number, e.g. python manage.py migrate --fake core zeroFlexuous
See also the --fake-initial flag docs.djangoproject.com/en/1.8/topics/migrations/….Rubberneck
FYI If you use zero instead of a migration number, you will lose any data in that tableHeath
Kindly note that core is the name of the appSuperfine

© 2022 - 2024 — McMap. All rights reserved.