0

我们正在将 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 类的新用户对象,如何保持用户/组的 ID 相同。

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

4

1 回答 1

2

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

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

如果已经编写了更长的多表继承教程,并且看起来您正在尝试做类似的事情。

此外,这个问题的答案也可能会有所帮助(请注意,原始答案中的某些内容在新版本的 django / south 中不起作用,请参阅我的教程 / 底部的答案以了解更改)。

在您的情况下可能存在的问题是,如果您已经在 User 和 Groups 中都有数据并且 id 字段是自动生成的,则IDs可能不是不同的,例如,您可能同时拥有 User 和 Group ID==1。如果您想基于这些进行查询,这可能是一个问题IDs,当然ID当时不能作为主键AccessEntity

于 2011-02-17T13:31:41.733 回答