使用更改的类层次结构迁移django-polymorphic模型

时间:2014-11-07 08:56:50

标签: python django migration django-south polymorphism

我们使用具有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的基类列。

但是,南方需要C.b_id的一次性值(对于向后迁移,还需要C.a_id的一次)。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  3. 架构迁移:删除C.

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