我是django的新手 - 我想知道我是否可以使用ORM更有效地进行以下查询:
# somewhere in views.py..
if slug is not None:
slug_field = self.get_slug_field()
pkid = FinalModel.objects.all().get(slug__exact=slug)
queryset = queryset.filter(owner__exact=pkid.id)
obj = queryset.get()
return obj
所以,基本上,我正在做的是(返回一个对象),首先:使用url中的slug获取pkid
,然后使用此信息(pkid.id
)来获取正确的使用查询集的完整对象(在不同的模型上运行 - 上面OnetToOne
键入FinalModel
)。
因此,简而言之,我首先使用PK
(Model = FinalModel)提取slug
并在另一个模型(PK
模型上使用此queryset
)OneToOne
键入FinalModel
(使用owner
属性)。
我不确定使用两个这样的语句对数据库是否有效(我也不是这方面的专家) - 我想知道是否有人可以建议我如何组合这两个语句(pkid
和{ {1}})更有效地获得最终对象。
很抱歉,如果这是一个django 101问题。
答案 0 :(得分:1)
如果您展示了模型,这将更容易回答。但假设owner
是一个来自FinalModel的ForeignKey,最后是你想要获得的任何模型,你可以使用双下划线语法来进行JOIN:
obj = MyModel.objects.get(owner__slug=slug)
(注意,您不需要指定exact
,这是默认设置。)