这是此问题的扩展:How to move a model between two Django apps (Django 1.7)
我希望使用Django迁移将模型M从应用A移动到应用B,而不会丢失数据。该问题的最佳投票答案(不是已接受的答案,ozan之一)建议使用migrations.SeparateDatabaseAndState并分两步执行:
这看起来对我来说是一种非常聪明的方式,但是在我的情况下还有另一个模型N有一个M的外键。现在,当我在第二步调用makemigrations来制作迁移文件时,我收到错误,因为在那个阶段模型AM不再存在:
ValueError: Lookup failed for model referenced by field C.N.m: A.M
有办法解决这个问题吗?
答案 0 :(得分:3)
这就是我最终做到的。主要思想是在删除旧模型之前创建新模型schillingt建议,但也使用migrations.SeparateDatabaseAndState来避免数据库修改,如链接问题中那样。
将模型从A复制到B.定义db_table以指定相同的表名
进行B迁移。将迁移文件修改为仅使用 migrations.SeparateDatabaseAndState 创建状态而不是数据库表。
修改N中的外键以指向B.M而不是A.M(通过to ='B.M')。
为此更改进行迁移。
从A。
进行迁移以进行删除。修改它,使其仅删除模型,而不是数据库表。
应用所有迁移。
之后仍然可以重命名该表,但是在我使用的1.7版本中,迁移不支持db_table更改。
答案 1 :(得分:0)
这是我将如何处理它。