【问题标题】:Migrating django-polymorphic models with changed class hierarchy迁移具有更改的类层次结构的 django 多态模型
【发布时间】:2014-11-07 08:56:49
【问题描述】:

我们使用 django-polymorphic 的多态模型。

最近我们改变了这些模型的层次结构,从这里开始:

class A(PolymorphicModel):
    # foo
class B(A):
    # bar
class C(A):
    # baz

到这里:

class A(PolymorphicModel):
    # foo
class B(A):
    # bar
class C(B):  # C became a subclass of B.
    # baz

B 中的所有字段都有一个默认值,因此理论上,有一种平滑的方式可以将现有数据迁移到新架构。它需要在表B中创建行,并重新占用表C的基类列。

但是,South 要求 C.b_id 使用一次性值(C.a_id 也需要一个一次性值,用于向后迁移)。

我意识到 South 不知道 django-polymorphic。此外,当我想在数据迁移中“只在 B 中添加一行”时,django-polymorphic 也会出现问题。

在这种情况下迁移数据最优雅的方法是什么?

【问题讨论】:

    标签: python django migration django-south polymorphism


    【解决方案1】:

    我找到的最佳解决方案是:

    1. 架构迁移:添加与 C 具有相同字段但从 B 派生的模型 C_temp。
    2. 数据迁移:将所有数据从C复制到C_temp。

      对于 C 中的每个对象,通过复制包括 id 在内的所有字段来创建一个新的 C_temp。为 B 中的字段提供默认值。

      这将在 B 中添加新行并将其与 A 中的现有行连接。

    3. 架构迁移:删除 C.

    4. 架构迁移:将 C_temp 重命名为 C。

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多