gpt4 book ai didi

python - Django 1.7.1 : Child model, 删除对父模型的所有引用并让子模型继承自爷爷

转载 作者:行者123 更新时间:2023-12-01 04:27:03 26 4
gpt4 key购买 nike

我有三个模型,例如:

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

代码已经在生产环境中运行,所以我需要进行一些数据迁移。认为它会顺利进行,这就是我计划做的事情:

  1. 将每个 Cb_ptr_id 保存到临时字段。
  2. 删除 CB 的继承(在此过程中删除 b_ptr_id)。
  3. 使 C 继承于 A(在进程中添加 a_ptr_id)。
  4. 对于每个C,将临时字段中存储的值复制到a_ptr_id
  5. 删除临时字段。

我的问题出在步骤 3 上。当我尝试从 A 继承 C 时,我收到错误 django.core.exceptions.FieldError :类“C”中的本地字段“a_ptr”与基类“B”中名称相似的字段发生冲突。所以看起来 Django 仍然“记住”C 曾经从 B 继承,即使 b_ptr_id 不再是数据库中的C。我怎样才能让它忘记,以便我可以继续前进?或者有没有更好的方法让子模型继承其祖 parent 模型而不是父模型?

最佳答案

不确定是否有更简单的方法来做到这一点,但是......

尝试创建一个继承 A 的 C'。然后创建一个程序,为每个 C 实例创建一个 C' 实例。(之后删除C的所有实例)

如果您想保留名称 C,请更新 C 的架构,然后从 C' 实例重新填充 C。

希望有帮助。 :)

关于python - Django 1.7.1 : Child model, 删除对父模型的所有引用并让子模型继承自爷爷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32947888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com