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

Django迁移执行顺序异常:数据迁移晚于模型删除迁移报错

问题原因分析

Django 迁移的执行顺序由依赖关系和应用在INSTALLED_APPS中的顺序共同决定:

  • app1.app1_0002(删除模型M的迁移)仅依赖app1.app1_0001,未声明依赖app2.app2_0001;
  • app2.app2_0001仅依赖app1.app1_0001;
  • 由于app1在INSTALLED_APPS中的顺序大概率早于app2,Django会优先执行app1下的所有迁移(先0001再0002),之后才执行app2的0001——此时模型M已被app1_0002删除,因此触发LookupError。
解决方案

方案一:修复迁移依赖关系

修改app1/migrations/app1_0002.py的dependencies,添加对app2.app2_0001的依赖,确保删除模型的迁移在数据迁移之后执行:

class Migration(migrations.Migration):
    dependencies = [
        ('app1', 'app1_0001'),
        ('app2', 'app2_0001'),  # 新增依赖
    ]

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

方案二:合并迁移(适合开发阶段)

若项目仍在开发期,可合并相关迁移以避免依赖混乱:

  1. 删除app1和app2下的所有迁移文件(保留migrations/__init__.py);
  2. 清空数据库中的django_migrations表(仅测试环境操作);
  3. 重新生成并执行迁移:
    python manage.py makemigrations
    python manage.py migrate
    

方案三:移除无用的app2迁移

既然已彻底删除模型M,app2.app2_0001这个数据迁移已无意义,可直接删除该文件,测试环境下重新运行测试会自动跳过对应迁移记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:22:32