Django 迁移在执行顺序不正确后卡住

Django Migrations stuck after executing in incorrect order

我对数据库中的不同模型进行了两次更改。
第一个

operations = [
        migrations.DeleteModel(
            name='Settlement',
        ),
    ]

第二个:

operations = [
        migrations.RemoveField(
            model_name='invoice',
            name='settlement_deducted',
        ),
        migrations.RemoveField(
            model_name='invoice',
            name='settlement_supporting',
        ),
]

问题是他们按这个顺序运行,第二个失败了。在第二次迁移中删除的字段使用“结算”模型,但由于该模型在第一次迁移中被删除,因此会引发此错误:

ValueError: The field invoices.Invoice.settlement_deducted was declared with a lazy reference to 'accounting.settlement', but app 'accounting' doesn't provide model 'settlement'.
The field invoices.Invoice.settlement_supporting was declared with a lazy reference to 'accounting.settlement', but app 'accounting' doesn't provide model 'settlement'

现在当我尝试做任何事情来修复它时,它似乎只是停留在那个错误状态并不断抛出同样的错误。
我已经尝试将第一次迁移恢复到该模型上的先前迁移,将该模型重新添加并 运行ning makemigrations 然后迁移以便 Settlement 模型再次存在,并删除第二次迁移(尽管它从来没有 运行 无论如何)。所有这些选项仍然抛出相同的错误。

我很惊讶 Django 没有为我捕捉到这个依赖问题,但不幸的是现在已经太晚了。我也尝试将它添加为依赖项,但随后它只是抛出错误,指出迁移已在其依赖项之一之前迁移。

现场试试这个

py manage.py migrate <yourappname> zero

然后进入同一个应用程序文件夹并在该迁移文件夹中删除除 pycache 和 init.py 之外的所有文件,然后再次尝试 运行

py manage.py makemigrations
py manage.py migrate 

如果您正在使用任何其他 Os,请将 py 替换为 python 然后 windows 迁移零所做的是删除您应用程序的所有迁移,然后再次进行迁移,它将为您取回一切

如果还有其他错误请告诉我

我成功解决了问题!这些是我采取的步骤:

  1. 将第二个迁移添加为第一个迁移的依赖项
  2. 转到数据库中的 django_migrations table 并删除第一个迁移(已经 运行)
  3. 运行 仅第二次迁移
  4. 伪造第一次迁移(因为它已经 运行)
  5. (不必要的步骤,但在我的情况下是必要的)运行 正常迁移以完成从其他应用程序迁移未涉及的迁移