从现有的基对象(非派生对象)创建一个新的派生对象。

15 浏览
0 Comments

从现有的基对象(非派生对象)创建一个新的派生对象。

假设在Django中有以下的类结构:

class Base(models.Model)
class Derived(Base)

还有这个基础对象(仅为Base,不是Derived

b = Base()
b.save()

我想从b创建一个派生对象。哪种方法是正确的?我尝试过:

d = Derived(b)
d = Derived(base_ptr=b)

谢谢。

注意:我认为这个问题与“如何在Django中从模型基类到派生类转换?”不同,因为我需要从现有的基础(仅基础)对象创建一个新的派生对象。在那个问题中,它检查派生类是否已经存在,然后返回它。在我的情况下,派生对象不存在。

0
0 Comments

从上述内容中可以看出,问题是在尝试从现有的基本对象创建一个派生对象时出现了。第一次尝试时,代码重置了基本对象的所有字段,导致问题发生。为了解决这个问题,根据这个链接中的建议,可以采取以下方法:

d = Derived(base_ptr=b)
d.__dict__.update(b.__dict__)
d.save()

这个解决方法可能不是最优雅的,但它可以解决问题。通过更新派生对象的字典,将基本对象的字段值复制到派生对象中,然后保存派生对象,可以创建一个从现有基本对象派生出来的新对象。

0