You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django迁移因执行顺序错误卡住该如何解决?

修复步骤

  1. 临时恢复Settlement模型定义,先解决模型校验报错
    前往accounting应用的models.py文件,重新添加Settlement模型的空定义,让Django启动时不会找不到模型:

    from django.db import models
    
    class Settlement(models.Model):
        # 临时占位,不需要写任何字段
        class Meta:
            app_label = 'accounting'
    
  2. 回退已错误执行的删除Settlement迁移
    先查看accounting应用的迁移列表,找到删除Settlement的迁移对应的序号(比如文件名为0005_delete_settlement.py,序号就是0004,即上一个版本),执行回退命令:

    python manage.py migrate accounting 0004
    

    执行完成后,数据库会恢复Settlement表,Django迁移记录也会同步回退。

  3. 调整迁移依赖顺序
    打开删除Settlement的迁移文件(也就是刚才回退的0005_delete_settlement.py),在dependencies列表中添加删除字段的迁移作为前置依赖,示例:

    dependencies = [
        # 原有依赖保留,新增下面这行,替换成你自己的删除字段迁移对应的应用名和迁移文件名
        ('invoices', '0003_remove_invoice_settlement_deducted_and_more'),
        ('accounting', '0004_previous_migration'),
    ]
    

    这样可以强制Django先执行删除关联字段的迁移,再执行删除Settlement模型的迁移。

  4. 执行完整迁移
    现在可以把步骤1中临时添加的Settlement模型从models.py中删除,直接执行迁移命令即可:

    python manage.py migrate
    

特殊情况处理

如果回退迁移仍然报错,可以直接操作数据库修复:

  • 打开数据库,找到django_migrations表,手动删除accounting应用中删除Settlement的那条迁移记录
  • 手动在数据库中删除invoice表的settlement_deducted、settlement_supporting两个字段
  • 删除本地两个错误的迁移文件,重新执行makemigrations和migrate即可

内容的提问来源于stack exchange,提问作者insite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:12:03