关于python:Django迁移错误KeyError:(’list’,u’user’)

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中取出我的应用程序的另一个版本之后。

在另一台机器上相同的代码没有这个错误。我试过将--fakezerosquashmigrations结合使用,但这也没有帮助。

无法解决。


我遇到了一个类似的问题,db\migrations\operations\models.py在通过Pycharm的重构(重命名)重命名模型后抛出了一个KeyError

显然,重构也发生在迁移文件中。打开迁移文件并改回原始命名时,makemigrations命令工作正常。


问题出在迁移文件中。当我向git提交时,我删除了其中一个迁移文件,所以订单就像没有00020001 0003 0004。在第二个迁移文件中,我创建了一个名为user的模型。

问题是,当我运行python manage.py migratedjango时,找不到创建名为user的模型的位置(该模型是在0002文件中创建的)。

我通过手动将此代码添加到0001迁移文件中解决了这个问题:

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可能会混合执行一些迁移命令的顺序。

应用小的更改并运行makemigrationsmigrate,如果出现错误,可以编辑迁移文件。

可以更改某些行的执行顺序以避免错误。


我知道这是个老问题。但如果有人到了谷歌:

在我的特殊情况下,在重命名一个模型并同时修改它的元数据(例如,重命名一个模型及其详细名称)之后,我得到了这个错误。

为了修复它,我修改了上一次迁移,删除(或注释)与元数据更改相关的行,然后再次运行迁移命令。之后,再次运行makemigrations/migrate命令以更新数据库中的元数据。

我用的是Django2.0和PostgreSQL

希望你已经修好了。杰德


但是,我遇到了一个类似的问题,我无法在迁移文件中确定问题的来源。没有丢失的迁移文件。可能我看起来不够努力。

但是,当我"挤压迁移"解决了这个问题。我在这里回复只是为了让任何访问此页面的人也可以尝试此解决方案。