Django数据迁移,使用South with Inheritance

时间:2011-02-17 11:13:39

标签: python django django-models database-migration django-south

我们正在将Django项目的多个实例中的数据迁移到新架构。

旧架构有:

class Group(models.Model)
class User(models.Model)

新架构有:

class AccessEntity(models.Model)
class Group(AccessEntity)
class User(AccessEntity)

我们正在尝试使用South为这些组和用户执行数据迁移。 http://south.aeracode.org/docs/tutorial/part3.html

我已经收集到了,我需要使用前向规则来指定如何迁移用户,但是我遇到了一些问题。

主要问题是如果我要创建一个扩展AccessEntity类的新User对象,如何保持用户/组的ID相同。

用户&组由它们拥有或分配给它们的对象引用。如果我更改他们的ID,信息就会丢失。有没有办法为对象保留相同的ID,即使我现在需要它从AccessEntity扩展?

1 个答案:

答案 0 :(得分:2)

不确定我是否正确理解了您的问题,但多表模型继承的工作方式是父模型和子模型中存在隐式的一对一字段。因此,如果AccessEntity具有此类字段,则User和Group都将使用AccessEntity的ID字段。

如果您创建AccessEntity,使其具有字段ID,则可以在编写转发(数据) - 迁移时为其分配。这样,您就可以确保AccessEntity获得正确的ID。

如果写了更长的multi-table inheritance tutorial,看起来你正在尝试做类似的事情。

此外this question的答案也可能有所帮助(注意原始答案中的某些内容在新版本的django / south中不起作用,请参阅我的教程/底部的答案以进行更改)

在您的情况下可能存在的问题是,如果您已在用户和群组中同时拥有数据并且ID字段是自动生成的,则IDs可能不是明显的,例如您可能同时拥有一个用户和一个ID==1组。如果您想根据IDs进行查询,这可能会出现问题,当然ID无法成为AccessEntity的主键。