如何找到Django模型基类的“具体类”

如何找到Django模型基类的“具体类”,第1张

如何找到Django模型基类的“具体类”

Django通过父模型表与子模型表之间的OneToOneField实现模型继承。当您这样做时

base.object.all()
,Django仅查询基本表,因此无法知道子表是什么。因此,不幸的是,没有其他查询就不可能直接进入子模型实例

此代码段显示了将ContentType字段添加到基本模型的常用方法:

from django.contrib.contenttypes.models import ContentTypeclass base(models.Model):    content_type = models.ForeignKey(ContentType,editable=False,null=True)    def save(self):        if(not self.content_type): self.content_type = ContentType.objects.get_for_model(self.__class__)        self.save_base()    def as_leaf_class(self):        content_type = self.content_type        model = content_type.model_class()        if(model == base): return self        return model.objects.get(id=self.id)

然后可以说

if base.content_type.model_class()
确定类型。

这是另一个将自定义管理器添加到混合中的代码段。

如您所见,这两种解决方案都可能非常昂贵。如果您有大量实例,则使用as_leaf_class()方法将需要对每个项目进行一次查询。

相反,如果您拥有一组已知的子模型,只需简单地分别查询每个模型并将实例聚合到一个列表中。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5630961.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存