我有三个模型,如:
class A(models.Model):
pass
# more fields here
class B(A):
pass
# more fields here
class C(B):
pass
# more fields here
新要求要求我改为:
class A(models.Model):
pass
# more fields here
class B(A):
pass
# more fields here
class C(A):
pass
# more fields here
代码已在生产中运行,因此我需要进行一些数据迁移。认为它会顺利运作,这就是我打算做的事情:
C
的{{1}}保存到临时字段。b_ptr_id
删除C
的继承(在此过程中删除B
)。b_ptr_id
继承自C
(在此过程中添加A
)。a_ptr_id
,将临时字段中存储的值复制到C
。 我的问题在于第3步。当我尝试从a_ptr_id
创建继承C
时,我收到错误A
。所以看起来Django仍然“记得”django.core.exceptions.FieldError: Local field 'a_ptr' in class 'C' clashes with field of similar name from base class 'B'
曾经从C
继承,即使B
不再是数据库中b_ptr_id
的列< / strong>即可。如何让它忘记,以便我可以继续前进?或者有没有更好的方法让子模型继承祖父模型而不是父模型?
答案 0 :(得分:2)
不确定是否有更简单的方法可以做到这一点......
尝试创建一个继承A的C'。 然后创建一个程序,创建每个C实例的C'实例。 (之后删除所有C的实例)
如果要保留名称C,请更新C的架构,然后从C'实例重新填充C.
希望它有所帮助。 :)