web-dev-qa-db-ja.com

Django manage.py:依存関係の前に適用された移行

python manage.py migrateこのエラーが発生します。

Django.db.migrations.exceptions.InconsistentMigrationHistory: Migration
<appname>.0016_auto_<date2>_<time2> is applied before its dependency
<appname>.0001_squashed_0015_auto_<date1>_<time1>

showmigrationsリターンの実行:

<appname>
 [X] 0001_squashed_0015_auto_<date1>_<time1> (15 squashed migrations)
 [X] 0016_auto_<date2>_<time2>
 [ ] 0017_<modelname>_squashed_0019_auto_<date3>_<time3> (3 squashed migrations)

昨日、Djangoの拡張機能を試していましたが、直接SQLクエリを実行した後、すべてが台無しになり、gitを使用してハードリセットしました。私はまだ移行について学んでいるので、両方の移行がすでに適用されているように見えるので、何が間違っているのか理解できません。

ご協力ありがとうございました!

21

移行を潰したので、依存関係の1つは0016_auto_<date2>_<time2> hadは、新しく作成されたスカッシュマイグレーションの一部になりました。一方、0016_auto_<date2>_<time2>はすでに実行されており、現在、スカッシュマイグレーションを実行しようとしています。

これを自動的に修正する方法があるかどうかは個人的にはわかりません。自分で問題を修正する必要があります。バージョン管理がある場合は、これらの変更を元に戻し、古い変更に影響を与えずに移行を無効にする方法を再検討してください。

8
masnun
  1. 既に適用されている移行を参照しないように、競合する移行の依存関係を編集します。
  2. 次にpython manage.py migrateを再度実行し、修正する必要があります。

    • 警告:これは、データベースの状態が、競合する移行を適用した状態と一致すると仮定した場合にのみ機能します。
0
Duilio

これを実行python manage.py dbshell

INSERT INTO public.Django_migrations(app, name, applied)
VALUES ('YOUR_APP_NAME, '0017_<modelname>_squashed_0019_auto_<date3>_<time3>', now());

そして、あなたは元気でなければなりません。データベースへの移行が大幅に変更されていた場合、それを修正するのはそれほど簡単ではないでしょう。

0
test30

これは私のために働いた。オンラインで何時間も検索した後、この知識を共有してくれた同僚に感謝します。

Dbシェルを起動します

python manage.py dbshell

必要なデータベースを使用します。わからない場合は、「データベースの表示」を実行してください

mysql>use <database_name>;

アプリですべての移行を取得します

mysql> select * from Django_migrations where app='<app>';

すべての移行の横にIDの出力が表示されます。削除する移行を確認します。 IDは361だとしましょう

mysql> delete from Django_migrations where id=361;
0
user3661888