2013-02-20 82 views
1

考慮下面的代碼:django查詢select_related是否需要後續查詢?

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()這樣第二個查詢?

回答

1

不,您的progress queryset對象已經具有包含在底層sql中的外鍵關係。它創建一個帶連接的選擇查詢。進一步過濾不會刪除連接。

docs中有一個進一步處理包括select_related(儘管不使用filter)的查詢的例子。

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/