2009-07-13 74 views
0

對於我的一個客戶端,我從Django Admin生成客戶端列表。它按客戶的狀態分爲客戶,當前客戶,後天客戶和過去客戶。Django和SQL問題:減少數據庫點擊次數

目前,該列表視圖代碼如下:

def clients_list(request): 
current_clients = Client.objects.all().filter(status='current')[:10] 
acquired_clients = Client.objects.all().filter(status='acquired')[:10] 
past_clients = Client.objects.all().filter(status='past')[:10] 

return render_to_response('clients/list.html', { 
    'current_clients': current_clients, 
    'acquired_clients': acquired_clients, 
    'past_clients': past_clients 
}) 

現在,我知道,因爲它擊中了數據庫的三倍時,我敢肯定有辦法做到這一點是不理想它只有一個查詢。是否有可能重構這段代碼,使它只碰到數據庫一次,並使用Python將結果分成這三個變量?或者我只是在我的應用程序的一小部分中強調太多?

感謝,

馬特

+1

速度慢嗎?如果沒有,去一個並在其他地方優化。 – ebo 2009-07-13 19:33:49

回答

2

除非你異形你的應用程序,並知道這是一個嚴重的瓶頸,我想你已經得到了答案:「剛纔講太多」。

使用Q objects可以取在一個ORM聲明你的數據...

clients = Client.objects.filter(Q(status='current')|Q(status='acquired')|Q(status='past'))[:30] 

...但你不得不在一個queryset的所有三種狀態,大概不會有每個十個,你仍然需要將它們分開以備你的模板使用。

+0

+1由於原始查詢中設置的限制,我認爲「強調多」是正確的答案。 – 2009-07-14 03:45:52