Django迁移因执行顺序错误卡住该如何解决?
修复步骤
临时恢复Settlement模型定义,先解决模型校验报错
前往accounting应用的models.py文件,重新添加Settlement模型的空定义,让Django启动时不会找不到模型:from django.db import models class Settlement(models.Model): # 临时占位,不需要写任何字段 class Meta: app_label = 'accounting'回退已错误执行的删除Settlement迁移
先查看accounting应用的迁移列表,找到删除Settlement的迁移对应的序号(比如文件名为0005_delete_settlement.py,序号就是0004,即上一个版本),执行回退命令:python manage.py migrate accounting 0004执行完成后,数据库会恢复Settlement表,Django迁移记录也会同步回退。
调整迁移依赖顺序
打开删除Settlement的迁移文件(也就是刚才回退的0005_delete_settlement.py),在dependencies列表中添加删除字段的迁移作为前置依赖,示例:dependencies = [ # 原有依赖保留,新增下面这行,替换成你自己的删除字段迁移对应的应用名和迁移文件名 ('invoices', '0003_remove_invoice_settlement_deducted_and_more'), ('accounting', '0004_previous_migration'), ]这样可以强制Django先执行删除关联字段的迁移,再执行删除Settlement模型的迁移。
执行完整迁移
现在可以把步骤1中临时添加的Settlement模型从models.py中删除,直接执行迁移命令即可:python manage.py migrate
特殊情况处理
如果回退迁移仍然报错,可以直接操作数据库修复:
- 打开数据库,找到
django_migrations表,手动删除accounting应用中删除Settlement的那条迁移记录 - 手动在数据库中删除
invoice表的settlement_deducted、settlement_supporting两个字段 - 删除本地两个错误的迁移文件,重新执行
makemigrations和migrate即可
内容的提问来源于stack exchange,提问作者insite
相关产品推荐
相关产品推荐

