假设django中有以下类结构:
class Base(models.Model)
class Derived(Base)
Run Code Online (Sandbox Code Playgroud)
这个基础对象(只是Base,而不是Derived)
b = Base()
b.save()
Run Code Online (Sandbox Code Playgroud)
我想从 b 创建一个派生对象。哪种方法是正确的?我试过了:
d = Derived(b)
d = Derived(base_ptr=b)
Run Code Online (Sandbox Code Playgroud)
谢谢
注意:我认为这是一个与“如何在 Django 中从模型基类转到派生类? ”不同的问题,因为我需要的是从现有基(且仅基)对象创建一个新的派生对象。在该问题中,它检查派生类是否已存在,然后返回它。就我而言,派生对象不存在。
我想我找到了解决方案。我尝试的第二次尝试遇到了问题,它重置了基础对象的所有字段:
d = Derived(base_ptr=b)
d.save() # Resets all base fields of d
Run Code Online (Sandbox Code Playgroud)
正如 Django 模型继承中所述:创建现有实例的子实例(向下转型)?,这可以解决问题,尽管这不是最优雅的解决方案:
d = Derived(base_ptr=b)
d.__dict__.update(b.__dict__)
d.save()
Run Code Online (Sandbox Code Playgroud)