gpt4 book ai didi

python - 如何通过引用外键将 Django 模型移动到其他应用程序?

转载 作者:行者123 更新时间:2023-11-28 16:33:34 27 4
gpt4 key购买 nike

这是对这个问题的扩展:How to move a model between two Django apps (Django 1.7)

我想使用 Django 迁移将模型 M 从应用程序 A 移动到应用程序 B 而不会丢失数据。该问题的最佳投票答案(不是接受的答案,由 ozan 给出的答案)建议使用 migrations.SeparateDatabaseAndState 并分两步完成:

  1. 迁移以删除模型并重命名(而不是删除)数据库表。
  2. 迁移以创建新模型并为其使用现有表。

这对我来说看起来是一个非常聪明的方法,但是在我的例子中还有另一个模型 N 有一个指向 M 的外键。现在,当我在第二步中调用 makemigrations 来制作迁移文件时,我得到了一个错误,因为在那个阶段模型 A.M 不再存在:

ValueError: Lookup failed for model referenced by field C.N.m: A.M  

有办法处理吗?

最佳答案

这就是我最终做到的。主要思想是在删除旧模型之前创建新模型,如 schillingt建议,但也使用 migrations.SeparateDatabaseAndState 来避免链接问题中的数据库修改。

  1. 将模型从A复制到B。定义db_table以分配相同的表名

  2. 为 B 进行迁移。使用 migrations.SeparateDatabaseAndState 修改迁移文件以仅创建状态而不是数据库表。

  3. 修改 N 中的外键以指向 B.M 而不是 A.M(通过 to='B.M')。

  4. 为此更改进行迁移。

  5. 从 A 中删除模型。

  6. 为删除进行迁移。修改它,使其只删除模型,而不删除数据库表。

  7. 应用所有迁移。

之后仍然可以重命名表,但是在我使用的 1.7 版本中,迁移不支持 db_table 更改。

关于python - 如何通过引用外键将 Django 模型移动到其他应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29367677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com