栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何找到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()方法将需要对每个项目进行一次查询。

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625076.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号