Django对象过滤器(最后1000个)

时间:2009-10-19 11:24:17

标签: django filter

如何通过Objects.filter从数据库中检索最后1,000个值?我目前正在做的是给我输入数据库中的前1,000个值(即10,000行,它给我带来的是1-1000,而不是9000-1,000)。

当前代码:

limit = 1000
Shop.objects.filter(ID = someArray[ID])[:limit]

干杯

2 个答案:

答案 0 :(得分:12)

解决方案:

queryset = Shop.objects.filter(id=someArray[id])
limit = 1000
count = queryset.count()
endoflist = queryset.order_by('timestamp')[count-limit:]

endoflist是您想要的查询集。


效率:

以下内容来自关于reverse() queryset方法的django文档。

  

检索“最后”中的五个项目   一个查询集,你可以这样做:

my_queryset.reverse()[:5]
     

请注意,这并不完全相同   从序列的末尾切片   在Python中。上面的例子会   先返回最后一项,然后再返回   倒数第二项等。如果我们有   一个Python序列,看着   seq [-5:],我们会看到倒数第五   项目第一。 Django不支持   访问模式(切片来自   结束),因为这是不可能的   它在SQL中有效。

所以我不确定我的答案是否效率低,效率极低。我将order_by移到最终查询中,但我不确定这是否有所作为。

答案 1 :(得分:0)

reversed(Shop.objects.filter(id=someArray[id]).reverse()[:limit])