从一个应用程序移到Django的模型到另一个[复制](Move Django model from

2019-06-26 07:37发布

这个问题已经在这里有一个答案:

  • 如何迁移模型出一个Django应用程序,进入一个新的? 7个回答

我使创建在同一个Django应用程序型号太多的愚蠢的错误,现在我想把它分成3分不同的。 问题是:已经有一个在生产中两个客户的网站数据,所以我需要仔细计划做任何模式/数据迁移(我使用Django南)。 我如何进行把握,任何建议将不胜感激。

(我使用PostgreSQL Ubuntu的服务器上12.4 LTS,如果这是任何关联的)

我想过使用db.rename_table ,但无法弄清楚如何正确地更新外键的模式(从旧到新) -在数据库级别无关(因为表重命名已经有了涵盖),但不能因此在ORM的水平。

更新 :经过考虑之后,并要求后, 这个问题就programmmers.SE,我决定让事情变得简单,不用担心产品的主要版本之间迁移。 短期来看,我就用db.rename_table以匹配新的名称,同时还采用db_table丹尼尔·罗斯曼认为,同时保持所有的车型在旧的应用程序。 当升级到主要版本,我SWITH到新的应用程序,并完全抛弃所有迁移(新版本,以便全新安装将创建数据库“原样”,而不是通过所有历史迁移去)。

Answer 1:

我不明白为什么你需要的任何数据迁移的。

就在模型移动到新的应用程序,并添加db_table在内元类设置为指向旧的表名。



Answer 2:

我做了一个小规模的类似的事情最近,这是我的过程:

  1. 创建新的应用程序和相应的机型
  2. 更新视图使用新车型
  3. 更新单元/系统测试,以确保没有爆发(重要!)
  4. 编写基于老款用于填充新机型的管理命令
  5. 部署代码
  6. 新机型运行迁移
  7. 运行管理命令脚本来更新的新车型
  8. 离开旧的应用程序1-2周,当你觉得一切都很好,删除它们。

为什么我没有使用数据迁移的原因:

  1. 不熟悉 - 觉得工作太重要了,使用过程中,我不熟悉
  2. 更舒适的移动使用Python代码数据,然后用魔法南
  3. 然与依赖南方迁移问题。 不想进一步的迁移与数据迁移变得复杂。 这可能将是一个错误的假设成立,由于我不熟悉数据迁移的机制
  4. 也许,从3点偏见,我说服自己用南纯粹的架构管理工具是“正确”的方式做。 数据的创建/更新应Django的层中使用任一装置或定制管理命令来完成


Answer 3:

我能想到的最简单的解决方案:

  1. 创建SchemaMigration改变每一个外键的类型车型在旧的应用程序的基本类型(包括那些其内部的);
  2. 通常创建新的应用程序和他们的模型;
  3. 不要从旧表到新的数据迁移;
  4. 创建另一个SchemaMigration ,再次改变每一个原始类型到外键,现在指向新表;
  5. 从设置中删除旧的应用程序,并放弃其表。

费力,是的,但会做的伎俩。 我希望有一个更好的解决方案,但。



文章来源: Move Django model from one app to another [duplicate]