1

次のコードが与えられます:

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

たとえば、2番目のクエリに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 に答える