我犯了一个愚蠢的错误,就是在同一个Django应用程序中创建了太多的模型,现在我想把它分成3个不同的模型。问题是:在两个客户的站点中已经有生产数据,所以我需要仔细规划任何模式/数据迁移(我正在使用django-south)。我不确定如何继续,任何建议将不胜感激。
(我在Ubuntu服务器12.4 LTS上使用PostgreSQL,如果有任何相关性的话)
我考虑过使用db.rename_table
,但无法弄清楚如何正确更新这些模型的外键(从旧到新) - 在数据库级别无关紧要(因为表重命名已经覆盖了) ,但在ORM级别却不是这样。
更新:在考虑之后,在询问了programmmers.SE上的this question后,我决定保持简单,不要担心产品主要版本之间的迁移。短期内,我只会使用db.rename_table
来匹配新名称,同时使用db_table
作为Daniel Roseman建议,同时将模型保留在旧应用中。升级到主要版本时,我开始使用新应用程序并完全放弃所有迁移(因此,新版本的新安装将“按原样”创建数据库,而不是通过所有历史迁移。)
答案 0 :(得分:14)
我根本不知道你为什么需要任何数据迁移。
只需将模型移动到新应用程序,然后在内部Meta类中添加db_table
设置以指向旧表名。
答案 1 :(得分:3)
我最近在较小规模上做了类似的事情,这是我的过程:
我没有使用数据迁移的原因:
答案 2 :(得分:1)
我能想到的最简单的解决方案:
SchemaMigration
,将旧应用中模型的每个外键的类型更改为基本类型(包括内部类型); SchemaMigration
,再次将每个基本类型更改为外键,现在指向新表;