我对 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
) 使用 queryset(在不同的模型上运行 - OnetToOne
键入上面的 FinalModel
)语句获取正确的完整对象。
因此,简而言之,我首先使用 slug
(Model=FinalModel) 提取PK
,然后在另一个模型(queryset
模型)上使用此PK
,该模型OneToOne
键控到FinalModel
(使用 owner
属性)。
不确定使用两个这样的语句对数据库是否有效(我也不是这方面的专家) - 我想知道是否有人可以建议我如何将这两个语句(pkid
和 queryset
)结合起来更有效地获得最终对象。
对不起,如果这是一个 django 101 问题。
如果您展示模型,这将更容易回答。但是假设owner
是从 FinalModel 到最后想要获得的任何模型的外键,您可以使用双下划线语法来执行 JOIN:
obj = MyModel.objects.get(owner__slug=slug)
(请注意,您不需要指定exact
,这是默认值。