Django模型迁移至新应用后多对多关联表未重命名指向不存在表问题
错误原因
你仅在迁移操作中处理了Students、Teachers两个独立模型的表重命名逻辑,没有覆盖二者隐式生成的多对多关联表。你提到的Django提交修复的是显式指定through中间表的多对多字段迁移场景,没有声明中间表的隐式多对多关联表不会被自动重命名,需要手动补充操作。
修复方案
- 如果你还未执行迁移上线,可以直接修改oldapp的迁移文件,在原有两个模型重命名操作后新增SQL操作,手动重命名关联表:
operations = [ # 原有Students、Teachers模型的SeparateDatabaseAndState操作 ... migrations.RunSQL( sql="ALTER TABLE oldapp_students_teachers RENAME TO newapp_students_teachers;", reverse_sql="ALTER TABLE newapp_students_teachers RENAME TO oldapp_students_teachers;" ), ]
- 如果你已经执行过迁移,可以新建空迁移文件,把上述SQL操作加入后执行即可解决表不存在的报错。
- 如果你不想手动写SQL,也可以将该多对多字段改为显式声明
through中间表,将中间表也作为独立模型按原有逻辑迁移,不需要额外处理SQL。
内容的提问来源于stack exchange,提问作者xofynk
相关产品推荐
相关产品推荐

