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

Django删除模型表及迁移文件后触发relation does not exist报错如何解决

报错根因
  • 手动删除迁移文件的操作不符合Django迁移规则:Django的所有迁移执行历史都会同步存储在数据库的django_migrations系统表中,仅删除本地迁移文件不会抹除数据库中已经记录的执行历史,新旧迁移逻辑无法对齐就会触发表不存在的报错。
当前问题修复步骤
  1. 先恢复你删除的那张独立表对应的创建迁移文件,保证本地迁移目录的记录和django_migrations表的已执行记录对齐
  2. 执行python manage.py migrate --fake <你的应用名> zero,该操作只会抹除django_migrations表中该应用的所有迁移记录,不会真实修改业务库数据
  3. 到models.py中删除原有独立表的模型代码,给目标模型添加对应的ManyToMany关联字段
  4. 执行python manage.py makemigrations <你的应用名>生成新的迁移文件
  5. 执行python manage.py migrate <你的应用名>完成迁移即可

注意:如果操作的是带生产数据的线上环境,操作前必须全量备份数据库,避免误操作导致数据丢失

后续正确操作规范

删除模型(数据表)的标准流程

  • 直接在models.py中删除对应模型的代码,不要修改/删除任何已生成的历史迁移文件
  • 执行python manage.py makemigrations,Django会自动生成删除表的迁移记录
  • 执行python manage.py migrate,Django会自动删除数据库中的对应表,同时同步更新迁移历史记录

新增模型属性(字段)的标准流程

  • 在models.py的对应模型中添加字段,若新增非空字段需要提前设置合理的默认值,或者配置null=True允许空值
  • 执行python manage.py makemigrations,自动生成新增字段的迁移记录
  • 执行python manage.py migrate完成字段新增

禁止随意手动修改、删除已生成的迁移文件,除非你同时同步清理了django_migrations表中对应的迁移记录,否则必然会出现迁移逻辑不一致的各类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:18:01