我们使用具有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就会出现。
在这种情况下迁移数据最优雅的黑客是什么?
答案 0 :(得分:1)
我找到的最佳解决方案是:
数据迁移:将所有数据从C复制到C_temp。
对于C中的每个对象,通过复制所有字段(包括id)来创建新的C_temp。为B中的字段提供默认值。
这将在B中添加新行并将其与A中的现有行连接。
架构迁移:删除C.