django

django のマイグレーション失敗 django.db.migrations.exceptions.InconsistentMigrationHistory

以下のエラーに遭遇

(.venv) [django@host1 samplepj]$ python manage.py migrate
Traceback (most recent call last):
  File "/home/django/samplepj/manage.py", line 22, in 
    main()
  File "/home/django/samplepj/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/home/django/.venv/lib64/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/home/django/.venv/lib64/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/django/.venv/lib64/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/django/.venv/lib64/python3.11/site-packages/django/core/management/base.py", line 458, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/django/.venv/lib64/python3.11/site-packages/django/core/management/base.py", line 106, in wrapper
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/django/.venv/lib64/python3.11/site-packages/django/core/management/commands/migrate.py", line 120, in handle
    executor.loader.check_consistent_history(connection)
  File "/home/django/.venv/lib64/python3.11/site-packages/django/db/migrations/loader.py", line 327, in check_consistent_history
    raise InconsistentMigrationHistory(
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration myapp1.0003_hogehoge is applied before its dependency myapp2.0006_fugafuga on database 'default'.

showmigrations で状況を確認すると、myapp1.0003_hogehoge.py のコードの中で myapp2.0006_fugafuga が dependencies に含まれている。1 行目の生成時間を確認すると myapp2.0006 ができた後に myapp1.0003 が生成されている。時間軸がおかしいが現実そうなっているので受け入れねばならない。

だめだったこと

myapp1 の migrate を引き戻そうと python manage.py migrate myapp1 0002_initial を実行してみたが、同じエラーとなった。

解決策

config/settings.py から myapp1 をコメントアウト。

次に config/urls.py から関連するものをコメントアウト。ただし、他の app からも参照されている場合はエラーになるので、エラーの内容が変わるはずなのでよく見て、urls.py からどんどんコメントアウトしていく。

そして migrate が成功したら元に戻す。

コメント

タイトルとURLをコピーしました