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

如何在不删除所有迁移的情况下恢复Django Model中误删的表字段

问题根因

你删除了0006号迁移文件,但Django内置的django_migrations系统表中仍然保留了countries_app的0006迁移已执行完成的记录。此时即使你把population字段加回模型,Django对比当前模型状态和已执行迁移的快照时会判定状态一致,因此返回nothing to migrate。

温和恢复方案(无数据破坏风险)

全程无需删除历史迁移文件,也无需回滚所有迁移,仅需调整迁移记录后生成新迁移即可:

  • 第一步:确认你已经在Country模型中重新添加了正确的population字段定义
  • 第二步:执行伪回退操作,仅修改迁移记录不改动业务数据:
    python manage.py migrate countries_app 0005 --fake
    
    该命令的作用是将countries_app的已执行迁移标记回滚到0005版本,不会实际操作业务表的数据。
  • 第三步:重新生成迁移文件:
    python manage.py makemigrations countries_app
    
    此时Django会检测到模型中新增了population字段,生成新的0006号迁移文件,内容为新增字段而非之前的删除字段操作。
  • 第四步:执行迁移重建字段:
    python manage.py migrate countries_app
    
    执行完成后检查数据库,即可看到population字段已经恢复,原有业务数据不受任何影响。
注意事项

如果你的字段定义为非空(即null=False),生成迁移时需要按提示输入默认值,否则迁移会创建失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:06:03