我正在尝试运行
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中删除了我的应用程序的另一个版本后发生了。
我在另一台机器上使用相同的代码没有此错误。
我曾尝试将--fake
与zero
或squashmigrations
一起用于之前,但这也无济于事。
无法解决问题。
答案 0 :(得分:15)
我遇到了类似的问题,db\migrations\operations\models.py
在通过PyCharm的重构(重命名)重命名模型后抛出KeyError
。
显然,重构也发生在迁移文件中。打开迁移文件并更改回原始命名时,makemigrations
命令工作正常。
答案 1 :(得分:8)
问题出在迁移文件中。
当我以某种方式提交git时,我删除了其中一个迁移文件,因此订单类似于0001 0003 0004
而没有0002
。
在第二个迁移文件中,我创建了一个名为user的模型。
问题在于,当我运行python manage.py migrate
时,django无法找到创建名为user的模型的位置(此模型已在0002
文件中创建)。
我通过手动将此代码添加到0001
迁移文件来解决此问题:
migrations.CreateModel(
name='user',
fields=[
(...necessary fields...),
],
options={
'ordering': ('title',),
},
),
答案 2 :(得分:7)
我遇到了同样的问题,发现最简单的解决方案,如果你的models.py完好无损,只是删除所有旧的迁移文件,然后再次运行makemigrations。我不认为squashmigrations会有所帮助,因为它只会将所有不同的迁移文件合并为一个,并且它会根据当前的迁移文件进行迁移。如果您的迁移文件以某种方式损坏,这对您没有帮助。首先是导致这个问题的原因。
答案 3 :(得分:2)
我找到了导致这种情况的原因和解决方案。如果您有一个具有“替换”属性的压缩迁移,请删除引用django_migrations表中缺少的迁移的“替换”中的元组。这解决了它。
答案 4 :(得分:1)
在他对这个answer的评论中,我会用@ceasaro来表达。
较新版本的Django可以检测到更改并询问已完成的操作。 我还要补充一点,Django可能会混合一些迁移命令的执行顺序。
明智的做法是应用少量更改并运行makemigrations
和migrate
,如果发生错误,则可以编辑迁移文件。
可以更改某些行的执行顺序,以避免 错误。
答案 5 :(得分:0)
我遇到了类似的问题,但是,我无法在迁移文件中找出问题的根源。没有任何丢失的迁移文件。有可能我看起来不够努力。
然而,当我'squashmigrations'解决问题。我在这里做出回应,所以任何人都可以尝试这个解决方案。
答案 6 :(得分:0)
我知道这是一个老问题。但是如果有谷歌搜索的话:
在我的特定情况下,我在重命名模型并同时修改其元数据(例如重命名模型及其详细名称)后遇到了该错误
要解决此问题,我修改了上一次迁移,删除(或注释)了与元数据更改相关的行,然后再次运行迁移命令。之后,再次运行makemigrations / migrate 命令以更新数据库中的元数据
我正在使用Django 2.0和PostgreSQL
希望您已经修复它。 JGED
答案 7 :(得分:0)
将项目移至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
中的每个迁移文件,直到错误更改。此时,我知道哪个文件引起了问题,我有一个名为0005_similarmake_squashed_0024_unspecified_color.py
的压缩迁移文件,它压缩了0024和0005。
看着文件中的dependencies
,我看到它依赖于0004并将其更改为依赖于0024。现在一切正常!
答案 8 :(得分:0)
如果您不太关心历史记录的丢失,则可以转到应用程序的migrations
目录,然后删除其中的所有文件。然后是makemigrations
和migrate
。不会造成数据丢失,但以后可能会引起问题。
答案 9 :(得分:0)
嘿,当我将版本从 Django 1.11 迁移到 3.2.4 到最新版本时遇到了同样的问题
在做 python manage.py migrate 我遇到了同样的问题 KeyError on doing migrate
我在互联网上搜索并没有发现任何东西,所以我尝试调试根 出现问题的模块中的函数 lib/python3.8/site-packages/django/db/migrations/operations/fields.py”,第 167 行,在 state_forwards 中
这是我在迁移后打印 self.name 时发现的主要功能,self.name 以字节为单位,所以我找到了 b'code' 在我的整个迁移文件夹中,字面上我发现它以字节为单位,因此将其转换为字符串格式并最终尝试它对我有用!!!!!!!