web-dev-qa-db-ja.com

Django移行エラーKeyError:( 'list'、u'user ')

私は走ろうとしています

python manage.py migrate

または

python manage.py makemigrations

私はこのエラーを受け取りました:

Running migrations:
  No migrations to apply.
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/core/management/commands/migrate.py", line 183, in handle
    executor.loader.project_state(),
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/db/migrations/loader.py", line 338, in project_state
    return self.graph.make_state(nodes=nodes, at_end=at_end, real_apps=list(self.unmigrated_apps))
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/db/migrations/graph.py", line 280, in make_state
    project_state = self.nodes[node].mutate_state(project_state, preserve=False)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/db/migrations/migration.py", line 88, in mutate_state
    operation.state_forwards(self.app_label, new_state)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/db/migrations/operations/models.py", line 547, in state_forwards
    model_state = state.models[app_label, self.name_lower]
KeyError: ('list', u'user')

Gitからアプリの別のバージョンをプルした後に発生します。

別のマシンで同じコードを使用しても、このエラーは発生しません。 zeroとともに--fakeを使用するか、以前のsquashmigrationsを使用しようとしましたが、これも役に立ちません。

それを解決する方法を得ることができません。

16
Roberto

問題は移行ファイルにありました。どういうわけかgitにコミットしている間に、移行ファイルの1つを削除したため、0001 0003 0004なしの0002のような順序でした。 2番目の移行ファイルでは、userという名前のモデルを作成しました。

問題は、python manage.py migrate Django=を実行したときに、userという名前のモデルが作成された場所(このモデルは0002ファイルに作成されている)を見つけられなかった)でした。

このコードを手動で0001移行ファイルに追加して解決しました:

migrations.CreateModel(
        name='user',
        fields=[
            (...necessary fields...),
        ],
        options={
            'ordering': ('title',),
        },
    ),
8
Roberto

PyCharmのリファクタリング(名前の変更)を通じてモデルの名前を変更した後、db\migrations\operations\models.pyKeyErrorをスローしていたという同様の問題に遭遇しました。

どうやらリファクタリングも移行ファイルで行われました。移行ファイルを開いて元の名前に戻すと、makemigrationsコマンドは正常に機能しました。

19
SaeX

同じ問題があり、models.pyがそのままの場合、最も簡単な解決策は、古い移行ファイルをすべて削除してからmakemigrationsを再度実行することであることがわかりました。スカッシュマイグレーションは、すべての異なるマイグレーションファイルを1つにまとめるだけであり、現在のマイグレーションファイルに基づいてマイグレーションするため、役に立たないと思います。移行ファイルが何らかの理由で破損している場合、これは役に立ちません。そもそもこれがこの問題の原因です。

7
Rijo Simon

これの原因と解決策を見つけました。 "replaces"プロパティを持つつぶされた移行がある場合は、Django_migrationsテーブルにない移行を参照する "replaces"のタプルを削除します。これはそれを修正します。

2
kagronick

私はそれが古い質問であることを知っています。しかし、誰かがグーグルで到着した場合:

私の特定のケースでは、モデルの名前を変更し、同時にそのメタデータを変更した後、エラーが発生しました(例:モデルの名前とその詳細名を変更します)

これを修正するために、最後の移行を変更し、メタデータの変更に関連する行を削除(またはコメント)して、移行コマンドを再度実行しました。その後、makemakerations/migrateコマンドを再度実行して、データベース内のメタデータを更新します

Django 2.0およびPostgreSQLを使用しています

あなたはすでにそれを修正してほしい。 JGED

1
José

私は@ceasaroの言葉を作るでしょう、これについての彼のコメントを私のものにします answer

Djangoの新しいバージョンは、変更を検出し、何が行われたかを尋ねることができます。また、Djangoは、いくつかの移行コマンドの実行順序を混合する可能性があります。

小さな変更を適用してmakemigrationsおよびmigrateを実行することをお勧めします。エラーが発生した場合は、移行ファイルを編集できます。

一部の行の実行順序は、theエラーを回避するために変更できます。

1
diogosimao

同様の問題に遭遇しましたが、移行ファイルで問題の原因を特定できませんでした。欠落している移行ファイルもありませんでした。私は十分によく見えなかった可能性があります。

しかし、私が問題を修正したのは「スカッシュマイグレーション」です。私はここで応答しているので、このページにアクセスした誰もがこの解決策を試すことができます。

0
gowthaman

プロジェクトをpython3に移動すると、python 2.7で発生しなかった同様の問題が発生しました。python3を使用して実行すると、これが私の出力でした:

_Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/silberringe/dms3/lib/python3.7/site-packages/Django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/Users/silberringe/dms3/lib/python3.7/site-packages/Django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/silberringe/dms3/lib/python3.7/site-packages/Django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/silberringe/dms3/lib/python3.7/site-packages/Django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/Users/silberringe/dms3/lib/python3.7/site-packages/Django/core/management/commands/migrate.py", line 163, in handle
    pre_migrate_state = executor._create_project_state(with_applied_migrations=True)
  File "/Users/silberringe/dms3/lib/python3.7/site-packages/Django/db/migrations/executor.py", line 81, in _create_project_state
    migration.mutate_state(state, preserve=False)
  File "/Users/silberringe/dms3/lib/python3.7/site-packages/Django/db/migrations/migration.py", line 92, in mutate_state
    operation.state_forwards(self.app_label, new_state)
  File "/Users/silberringe/dms3/lib/python3.7/site-packages/Django/db/migrations/operations/fields.py", line 201, in state_forwards
    state.models[app_label, self.model_name_lower].fields
KeyError: ('Finder_app', 'listing')
_

ご覧のとおり、_-v 3_を使用しても、_--fake_を使用しても問題の原因となっているファイルを受信できませんでした。動作しませんでした。

エラーが変更されるまで、最終的にコメントアウトして、_Finder_app_の各移行ファイルのコメントを外しました。この時点で、問題の原因となっているファイルがわかっています。0024および0005を破棄する_0005_similarmake_squashed_0024_unspecified_color.py_という名前の破棄された移行ファイルがありました。

ファイル内のdependenciesを見ると、0004に依存していることがわかり、0024に依存するように変更しました。これですべてが正常に機能します。

0
elad silver