2011-04-18 136 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()。