web-dev-qa-db-ja.com

--fakeを使用した後にDjango 1.8で移行をやり直す方法

移行で問題が発生したため、モデルに新しいdatetimefieldを追加してから、makemigrationsを使用して移行しました。

python manage.py makemigrations
python manage.py migrate

しかし、この後、移行は「テーブルが既に存在するエラー」を取得しました。移行を偽造してやり直すことができると思っていたので、

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

しかし、私が作成したばかりの新しい移行も偽造されました(もちろんです!)。

これを行った後、移行(この場合はcore.0004)をやり直す適切な方法はどうですか?

最初に--fakeを使用して現在の状態を0003に設定する必要があります(0003が実際に適用した最後の移行であると仮定します):

python manage.py migrate --fake core 0003

そして、いつものように進みます:

python manage.py migrate core

関連ドキュメント: https://docs.djangoproject.com/en/dev/ref/Django-admin/#migrate

87
Vasily Alexeev