2011-12-01 28 views

回答

1

你可以調用values

Entry.objects.filter(is_admin=True).values_list('id', flat=True).order_by('id') 
+0

我有一個querset = [obj1,ob2,ob3 ...]。我怎樣才能過濾這個查詢集。我不想做一個新的數據庫調用。其實我正在傳遞查詢集到一個函數。那些查詢集可能來自不同的模型。但是我的功能是通用的。 – user426795

+0

以前是否對查詢集進行了評估?如果沒有,你實際上並沒有擊中數據庫,所以繼續這樣做吧。而且,你可能會陷入過早的優化,當你需要一組特定的項目時,可以點擊數據庫。 –

+0

好的謝謝你的提示。但我有一個採用queryset的函數。我將一個評估的查詢集傳遞給它。根據不同的參數進行評估。但是,這樣的函數在不同的情況下會採用不同的查詢集。但實際上,該函數在基於is_admin = True – user426795

1

我們的目標是設計您的應用程序,這樣的查詢集未評估的最後一個過濾器是由你的函數應用後,直到前篩選查詢集。

qs = Entry.objects.filter(...whatever...) 
qs = qs.exclude(...whatever...) 
qs = qs.filter(...something_else...) 
# qs is not evaluated yet 

def my_func(some_qs): 
    return some_qs.filter(is_admin=True) 

qs = my_func(qs) 
# qs is still not evaluated yet 

,如果你沒有選擇,而不是過濾已經評估查詢集,然後要知道你可以把它像任何其他的迭代,如使用內置過濾功能就像一個列表:

admins = filter(lambda x: x.is_admin, my_evaluated_qs) 
相關問題