2011-04-18 133 views
0

我有一個django應用程序,它顯示每個客戶端的項目列表。它顯示一個項目ID,一個替代ID,標題和更多的其他信息。因爲我有很多物品(每個客戶可能有一千個物品),所以加載所有物品可能需要很長時間。有沒有辦法提高這個速度?Django:想提高查詢速度

def client_items(request, client_id = 0): 
    client = None 
    items = None 
    try: 
     client = models.Client.objects.get(pk = client_id) 
     items = client.storageitem_set.all() 
    except: 
     return HttpResponse(reverse(return_clients)) 
    return render_to_response('items.html', {'items':items, 'client':client}, context_instance = RequestContext(request)) 

{% for item in items %} 
     <tr class="items_table_row"> 
       <td><input type="checkbox" name="{{item.pk}}" value="{{item.pk}}" checked="checked"></td> 
       <td>{{item.company_id}}</td><td>{{item.alternative_id}}</td><td>{{item.title}}</td><td>{{item.type}}</td><td>{{item.format}}</td> 
       <td><span id="{{item.pk}}" name="type">{{item.itemstatushistory_set.latest}}</span></td><td>{{item.itemstatushistory_set.latest.date.date|date:"d M Y"}}</td> 
{% endfor %} 
+0

你真的想顯示數千個項目的HTML嗎? – vartec 2011-04-18 09:35:19

+0

那麼這就是我們的客戶想要的。當然我不介意分頁' – Shehzad009 2011-04-18 09:37:44

+0

請定義「很長」。請包括一些可接受的短時間。此外,請分析這個片段,找出時間花在哪裏。既然你寫了這麼少的代碼,你的代碼**不會出錯。您需要測量導致「非常長」(不管是什麼)的數據庫,網絡,服務器和客戶端時間。 – 2011-04-18 10:07:19

回答

0

Paginate results到的東西比成千上萬的項目更易於管理。如果沒有分頁,它不僅會變慢,而且會給用戶帶來不好的體驗。

0

確保使用恆定數量的數據庫查詢加載項目。對於大多數視圖,您應該只能讀取一個數據庫來加載所有數據。

如果您發現查詢的增加或減少取決於顯示的項目數,您可能需要在查詢集中包含select_related()。