如何修复Django 2.0.2项目中的迁移执行顺序问题?
解决Django多应用迁移依赖顺序问题
这个问题我在维护多应用Django项目时也踩过坑,核心是app_one的初始迁移没有正确声明对app_two的依赖,导致Django默认的迁移顺序不满足业务需求,进而出现表不存在的错误,连测试命令都跑不起来。下面给你一套亲测有效的解决步骤:
1. 手动修改app_one的初始迁移文件
找到app_one/migrations/目录下的初始迁移文件(一般是0001_initial.py),打开后在Migration类里添加对app_two迁移的依赖:
from django.db import migrations, models class Migration(migrations.Migration): # 新增这一行依赖声明 dependencies = [ ('app_two', '0001_initial'), # 这里填app_two的初始迁移文件名(不带.py后缀) ] operations = [ # 这里是原来的迁移操作,不用改动 migrations.CreateModel(...), # ...其他原有代码 ]
如果app_two已经有多个迁移版本,建议指定最新的那一个迁移文件(比如0002_update_some_model),确保依赖的是最新的表结构。
2. 验证迁移顺序
现在不需要分开执行迁移命令了,直接运行:
python manage.py migrate
Django会自动识别依赖关系,先执行app_two的所有迁移,再执行app_one的迁移,完美解决之前的报错。
3. 测试命令恢复正常
迁移顺序正确后,测试数据库的创建也会按依赖顺序执行,直接运行:
python manage.py test
就不会再出现模型关系不存在的问题了。
额外注意事项
- 不要随意修改迁移文件里的
operations部分,只调整dependencies即可,避免破坏迁移的完整性 - 后续如果app_two有新的迁移,而app_one的模型依赖了这些新变化,记得同步更新app_one对应迁移文件的依赖
- INSTALLED_APPS里的app顺序现在不再重要,因为依赖声明会覆盖Django的默认迁移顺序
内容的提问来源于stack exchange,提问作者SS_Rebelious
相关产品推荐
相关产品推荐

