我有MyBaseModel(PolymorphicModel)
和MyChildModel(MyBaseModel)
。我从DB检索MyChildModel的实例,并希望将其转换为MyBaseModel,以便将它们传递给通用序列化函数(我希望它们被序列化为MyBaseModel)。
这可能吗?
我尝试了MyBaseModel(my_child_model_instance)
,但它生成了新实例而不是现有的。
答案 0 :(得分:1)
可能有效的是直接施放课程:
my_child_model_instance.__class__ = MyBaseModel
否则,由于性能损失,django多态文档提到:
如果在查询链中的任何位置插入.non_polymorphic(),那么 django_polymorphic将简单地省略检索的最后一步 真实对象,经理/查询集将返回对象 您用于查询的基类的类型,如vanilla Django 将(本例中为ModelA)。
因此,casted = MyBaseModel.objects.non_polymorphic().get(id=my_child_model_instance.id)
将为您提供该对象的MyBaseModel版本。