django数据库有效的查询集在两个模型上

时间:2013-11-17 14:18:34

标签: django django-models django-views

我是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模型上使用此querysetOneToOne键入FinalModel(使用owner属性)。

我不确定使用两个这样的语句对数据库是否有效(我也不是这方面的专家) - 我想知道是否有人可以建议我如何组合这两个语句(pkid和{ {1}})更有效地获得最终对象。

很抱歉,如果这是一个django 101问题。

1 个答案:

答案 0 :(得分:1)

如果您展示了模型,这将更容易回答。但假设owner是一个来自FinalModel的ForeignKey,最后是你想要获得的任何模型,你可以使用双下划线语法来进行JOIN:

obj = MyModel.objects.get(owner__slug=slug)

(注意,您不需要指定exact,这是默认设置。)