Database 将Django模型从一个应用程序移动到另一个应用程序
我犯了一个愚蠢的错误,在同一个Django应用程序中创建了太多的模型,现在我想把它分成3个不同的模型。问题是:在两个客户的站点中已经有数据在生产中,所以我需要仔细规划要完成的任何模式/数据迁移(我使用的是django south)。我不确定如何进行,如有任何建议,将不胜感激 (我正在Ubuntu服务器12.4 LTS上使用PostgreSQL,如果这与此相关的话) 我考虑过使用,但不知道如何正确地将外键更新到那些模型(从旧到新)-在数据库级别不相关(因为表重命名已经涵盖了这一点),但在ORM级别则不是这样Database 将Django模型从一个应用程序移动到另一个应用程序,database,django,django-south,schema-migration,Database,Django,Django South,Schema Migration,我犯了一个愚蠢的错误,在同一个Django应用程序中创建了太多的模型,现在我想把它分成3个不同的模型。问题是:在两个客户的站点中已经有数据在生产中,所以我需要仔细规划要完成的任何模式/数据迁移(我使用的是django south)。我不确定如何进行,如有任何建议,将不胜感激 (我正在Ubuntu服务器12.4 LTS上使用PostgreSQL,如果这与此相关的话) 我考虑过使用,但不知道如何正确地将外键更新到那些模型(从旧到新)-在数据库级别不相关(因为表重命名已经涵盖了这一点),但在ORM级别
更新:经过思考,并在programmmers.SE上询问后,我决定保持简单,不必担心产品主要版本之间的迁移。短期来说,我将只使用
db.rename_table
来匹配新名称,同时按照Daniel Roseman的建议使用db_table
,同时将模型保留在旧应用程序中。升级到主要版本时,我会切换到新应用程序并完全放弃所有迁移(因此新版本的新安装将“按原样”创建数据库,而不是进行所有历史迁移)。我能想到的最简单解决方案:
SchemaMigration
将旧应用程序中模型的每个外键的类型更改为基本类型(包括其内部的外键)李>
SchemaMigration
,再次将每个原语类型更改为外键,现在指向新表李>
很辛苦,是的,但会成功的。不过,我希望有更好的解决方案。最近,我在较小规模上做了类似的事情,这就是我的过程:
我完全不明白您为什么需要任何数据迁移
只需将模型移动到新应用程序,并在内部元类中添加一个设置,以指向旧表名。短期内,这就是我计划要做的。但我不想永远维持我项目的两个分支。最后,我想升级老客户的代码库以匹配新客户的代码库,如果可能的话,我宁愿使用默认的表名(但如果成本大于收益,则会使用默认的表名)。这非常有效,但这在现代Django迁移中如何起作用呢?数据迁移没有南方魔法,south所做的只是创建一个存根,在其中填充代码。从这个意义上讲,它与使用python代码移动数据没有什么不同。我在迁移和依赖性方面也遇到过问题,但通常可以通过按特定顺序迁移应用程序来解决(这些问题也是代码中循环依赖性的一个很好的指标,最好还是删除它们)。有关
django>=1.7
的信息,请参阅本文: