从现有基础对象(未派生)创建新的派生对象

时间:2016-10-17 10:37:49

标签: django

假设django中有以下类结构:

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

这个基础对象(只是 Base ,而不是 Derived

b = Base()
b.save()

我想从b创建派生对象。这是正确的方法吗?我试过了:

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

由于

注意:我认为这是一个不同的问题,而不是" 如何从模型库转到Django中的派生类?"因为我需要的是从现有的基础(并且只有基础)对象创建一个新的派生对象。在该问题中,它检查派生类是否已经存在然后返回它。就我而言,派生对象不存在。

1 个答案:

答案 0 :(得分:2)

我想我找到了解决方案。我尝试的第二次尝试遇到了重置基础对象的所有字段的问题:

d = Derived(base_ptr=b)
d.save()  # Resets all base fields of d

Django model inheritance: create sub-instance of existing instance (downcast)?所述,这可以解决问题,虽然这不是最优雅的解决方案:

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