2012-05-07 95 views
2

我创建了一个Django应用程序,其中我有一个包含'项目'的表格,它们的创建日期以及它们的点数有。我想写一个查询,返回最近4天内得分最高的项目,然后是4天前得分最高的项目,依此类推。我想知道我该如何去做(我对SQL很陌生,如果这是一个基本问题,我非常抱歉)。我认为我可以遍历Django视图中的每个集合中的4个顶级记录,然后合并这些对象,但这需要我为每个集合敲击数据库,并且我猜测这会是一种糟糕的方式。正在做?任何指针将非常感激!获取4天内创建的每个记录集中的“最高”记录

谢谢!

回答

5

不幸的是,没有办法避免在这里为每个组打开数据库。不过这应该不是什么大问题,我假设你会限制团体的数量以达到理智的程度?如果您担心数据库负载,请确保您为'创建日期'和'点'字段编制索引。

您的代码应该是这个样子:

from datetime import date, timedelta 
from models import Item 

groups = [] 
for i in range(0, 10): 
    items = Item.objects.filter(date_created=date.today() - timedelta(i)) 
    groups.append(items.order_by('-points')) 
+0

感谢您的答案男子,欣赏它。 – iman453