Django migrate命令未使用最新迁移文件的问题解决求助
解决Django迁移始终尝试应用旧迁移文件的问题
步骤1:检查迁移状态记录
进入数据库shell执行查询,确认django_migrations表中目标应用的迁移记录:
SELECT * FROM django_migrations WHERE app='app_name';
查看结果里哪些迁移文件被标记为applied。如果发现迁移3未被标记,但迁移4、5也没有记录,同时数据库表已经存在,说明迁移记录和实际数据库状态不一致。
步骤2:手动标记迁移为已应用
如果确认迁移3到5的所有变更已经在数据库中生效(比如表结构和最新模型完全匹配),可以用--fake参数强制标记迁移为已应用:
# 直接标记到最新的5号迁移 ./manage.py migrate app_name --fake 0005
如果迁移3本身也已经实际应用但未被记录,先标记3再标记5:
./manage.py migrate app_name --fake 0003 ./manage.py migrate app_name --fake 0005
步骤3:排查迁移文件依赖
检查迁移文件(0003、0004、0005)开头的dependencies字段,确认依赖关系是否正确。比如0004的依赖应该是['app_name.0003'],0005的依赖应该是['app_name.0004']。错误的依赖会导致Django认为必须先执行未完成的旧迁移。
极端情况处理(谨慎操作)
如果上述方法无效,且确认数据库结构和最新模型完全一致,可以重置迁移记录:
- 务必先备份数据库,避免数据丢失
- 删除
django_migrations表中该应用的所有记录:
DELETE FROM django_migrations WHERE app='app_name';
- 重新标记所有迁移为已应用:
./manage.py migrate app_name --fake-initial
内容的提问来源于stack exchange,提问作者Ankit Singh
相关产品推荐
相关产品推荐

