26

我正在尝试运行

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

我没有在另一台机器上使用相同的代码出现此错误。我曾尝试使用--fakewithzerosquashmigrationsto previous 但这也无济于事。

无法得到如何解决它。

4

11 回答 11

40

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

显然,重构也发生在迁移文件中。打开迁移文件并改回原始命名时,该makemigrations命令运行良好。

于 2016-11-26T09:45:08.140 回答
12

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

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

我通过手动将此代码添加到0001迁移文件来解决它:

migrations.CreateModel(
        name='user',
        fields=[
            (...necessary fields...),
        ],
        options={
            'ordering': ('title',),
        },
    ),
于 2016-01-21T14:51:08.680 回答
7

我有同样的问题,发现最简单的解决方案,如果你的 models.py 是完整的,就是删除所有旧的迁移文件,然后再次运行 makemigrations。我不认为 squashmigrations 会有所帮助,因为它只会将所有不同的迁移文件合并为一个,并且它会根据当前的迁移文件进行迁移。如果您的迁移文件以某种方式损坏,这将无济于事。这首先是导致这个问题的原因。

于 2016-06-14T18:33:16.583 回答
5

我找到了导致此问题的原因及其解决方案。如果您有一个具有“替换”属性的压缩迁移,请删除“替换”中引用 django_migrations 表中缺少的迁移的元组。这解决了它。

于 2018-01-03T17:36:40.333 回答
4

我知道这是一个老问题。但是,如果有任何到达谷歌搜索:

在我的特殊情况下,我在重命名模型并同时修改其元数据(例如重命名模型及其详细名称)后出现了该错误

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

我正在使用 Django 2.0 和 PostgreSQL 9.6

希望你已经修复它。JGED

编辑:PostgreSQL 版本

于 2018-11-20T19:09:15.323 回答
3

如果您不太关心历史记录的丢失,您可以转到migrations应用程序的目录并删除那里的所有文件。然后makemigrationsmigrate。它不会导致数据丢失,但可能会在以后引起问题。

于 2020-05-04T09:12:30.710 回答
2

我会用@ceasaro 的话来评论他对这个答案的评论。

较新版本的 Django 可以检测更改并询问已完成的操作。我还要补充一点,Django 可能会混合一些迁移命令的执行顺序。

明智的做法是应用小的更改并运行makemigrationsmigrate如果发生错误,可以编辑迁移文件。

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

于 2018-06-27T12:38:18.797 回答
0

我遇到了类似的问题,但是,我无法在迁移文件中确定问题的根源。也没有任何丢失的迁移文件。可能我看的不够仔细。

然而,当我'squashmigrations'解决了这个问题。我在这里回复只是为了让访问此页面的任何人也可以尝试此解决方案。

于 2016-05-30T07:53:38.747 回答
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.py0024 和 0005 的压缩迁移文件。

查看dependencies文件内部,我看到它依赖 0004 并将其更改为依赖 0024。现在一切正常!

于 2019-12-06T15:46:26.230 回答
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',从字面上看,我发现它以字节为单位将其转换为字符串格式并最终尝试它对我有用!!!!!!!

于 2021-07-06T06:46:46.397 回答
0

我将 Python3.9 与 DJango 4.1.dev20211216191317 一起使用。

我的问题是如何发生的:

我创建了我的模型、进行迁移、迁移,然后想要改变一些东西。我不担心数据丢失,所以我使用 psycopg2 登录到我的 postgres 数据库,创建游标,找到 Django 创建的数据库表并手动删除它们,提交(尽管我认为你不必提交表丢弃),并关闭连接。然后,我删除了我的小程序的迁移文件夹中的文件,并在我更新了我的 models.py 后尝试进行迁移。这给我带来了问题。

我如何修复它:

据我所知,因为这就是我所做的一切,在重复上述几次并出现相同的错误之后,我保留了最新创建的迁移文件(看起来像 00001_init.py 或类似的东西),运行showmigrations 并看到 Django 在我的小程序中识别了它,然后执行 migrate --fake my_applet zero。我想我然后删除了迁移文件,然后是另一个makemigrations和migrate,它能够成功迁移。

于 2022-01-27T19:04:10.140 回答