私は走ろうとしています
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
を使用しようとしましたが、これも役に立ちません。
それを解決する方法を得ることができません。
問題は移行ファイルにありました。どういうわけか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',),
},
),
PyCharmのリファクタリング(名前の変更)を通じてモデルの名前を変更した後、db\migrations\operations\models.py
がKeyError
をスローしていたという同様の問題に遭遇しました。
どうやらリファクタリングも移行ファイルで行われました。移行ファイルを開いて元の名前に戻すと、makemigrations
コマンドは正常に機能しました。
同じ問題があり、models.pyがそのままの場合、最も簡単な解決策は、古い移行ファイルをすべて削除してからmakemigrationsを再度実行することであることがわかりました。スカッシュマイグレーションは、すべての異なるマイグレーションファイルを1つにまとめるだけであり、現在のマイグレーションファイルに基づいてマイグレーションするため、役に立たないと思います。移行ファイルが何らかの理由で破損している場合、これは役に立ちません。そもそもこれがこの問題の原因です。
これの原因と解決策を見つけました。 "replaces"プロパティを持つつぶされた移行がある場合は、Django_migrationsテーブルにない移行を参照する "replaces"のタプルを削除します。これはそれを修正します。
私はそれが古い質問であることを知っています。しかし、誰かがグーグルで到着した場合:
私の特定のケースでは、モデルの名前を変更し、同時にそのメタデータを変更した後、エラーが発生しました(例:モデルの名前とその詳細名を変更します)
これを修正するために、最後の移行を変更し、メタデータの変更に関連する行を削除(またはコメント)して、移行コマンドを再度実行しました。その後、makemakerations/migrateコマンドを再度実行して、データベース内のメタデータを更新します
Django 2.0およびPostgreSQLを使用しています
あなたはすでにそれを修正してほしい。 JGED
私は@ceasaroの言葉を作るでしょう、これについての彼のコメントを私のものにします answer 。
Djangoの新しいバージョンは、変更を検出し、何が行われたかを尋ねることができます。また、Djangoは、いくつかの移行コマンドの実行順序を混合する可能性があります。
小さな変更を適用してmakemigrations
およびmigrate
を実行することをお勧めします。エラーが発生した場合は、移行ファイルを編集できます。
一部の行の実行順序は、theエラーを回避するために変更できます。
同様の問題に遭遇しましたが、移行ファイルで問題の原因を特定できませんでした。欠落している移行ファイルもありませんでした。私は十分によく見えなかった可能性があります。
しかし、私が問題を修正したのは「スカッシュマイグレーション」です。私はここで応答しているので、このページにアクセスした誰もがこの解決策を試すことができます。
プロジェクトを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に依存するように変更しました。これですべてが正常に機能します。