1

给定以下代码:

    progresses = Progress.objects.filter(customer=request.user).select_related()
    if id is not None
        progress = progresses.get(pk=id)
    else:
        progress = progresses[0]

我是否需要将 select_related() 添加到第二个查询中,例如progress = progresses.filter(pk=id).select_related()

4

2 回答 2

1

不,您的progress查询集对象已经具有包含在基础 sql 中的外键关系。它正在创建一个带有连接的选择查询。进一步过滤它不会删除连接。

文档中有一个示例进一步处理包含select_related(尽管不使用filter)的查询。

于 2013-02-20T21:27:41.870 回答
0

filter() 和 select_related() 链接的顺序并不重要。这些查询集是等效的:

Entry.objects.filter(pub_date__gt=timezone.now()).select_related('blog')
Entry.objects.select_related('blog').filter(pub_date__gt=timezone.now())

来自官方 Django 文档:https ://docs.djangoproject.com/en/1.9/ref/models/querysets/

于 2016-05-23T10:56:49.890 回答