如何在django-polymorphic中将子模型对象转换为其基本模型?

时间:2016-03-10 14:14:56

标签: django

我有MyBaseModel(PolymorphicModel)MyChildModel(MyBaseModel)。我从DB检索MyChildModel的实例,并希望将其转换为MyBaseModel,以便将它们传递给通用序列化函数(我希望它们被序列化为MyBaseModel)。

这可能吗?

我尝试了MyBaseModel(my_child_model_instance),但它生成了新实例而不是现有的。

1 个答案:

答案 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版本。