Django migrations error KeyError: ('list', u'user')
我想跑
1 | python manage.py migrate |
或
1 | python manage.py makemigrations |
号
我得到这个错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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中取出我的应用程序的另一个版本之后。
在另一台机器上相同的代码没有这个错误。我试过将
无法解决。
我遇到了一个类似的问题,
显然,重构也发生在迁移文件中。打开迁移文件并改回原始命名时,
问题出在迁移文件中。当我向git提交时,我删除了其中一个迁移文件,所以订单就像没有
问题是,当我运行
我通过手动将此代码添加到
1 2 3 4 5 6 7 8 9 | migrations.CreateModel( name='user', fields=[ (...necessary fields...), ], options={ 'ordering': ('title',), }, ), |
我也遇到了同样的问题,发现如果models.py是完整的,那么最简单的解决方案就是删除所有旧的迁移文件,然后再次运行makemigrations。我不认为压缩迁移会有帮助,因为它只将所有不同的迁移文件组合到一个文件中,并根据当前的迁移文件进行迁移。如果您的迁移文件被某种方式损坏了,这将无济于事。这就是造成这个问题的原因。
我找到了导致这种情况的原因和解决方法。如果有一个具有"replaces"属性的压缩迁移,请删除django_迁移表中缺少的引用迁移的"replaces"中的元组。这可以解决问题。
我会用@ceasaro的话来评价他的回答。
新版本的django可以检测到变化并询问所做的工作。我还想补充一下,django可能会混合执行一些迁移命令的顺序。
应用小的更改并运行
可以更改某些行的执行顺序以避免错误。
我知道这是个老问题。但如果有人到了谷歌:
在我的特殊情况下,在重命名一个模型并同时修改它的元数据(例如,重命名一个模型及其详细名称)之后,我得到了这个错误。
为了修复它,我修改了上一次迁移,删除(或注释)与元数据更改相关的行,然后再次运行迁移命令。之后,再次运行makemigrations/migrate命令以更新数据库中的元数据。
我用的是Django2.0和PostgreSQL
希望你已经修好了。杰德
但是,我遇到了一个类似的问题,我无法在迁移文件中确定问题的来源。没有丢失的迁移文件。可能我看起来不够努力。
但是,当我"挤压迁移"解决了这个问题。我在这里回复只是为了让任何访问此页面的人也可以尝试此解决方案。