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

Fed*_*rer 6 django filter

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

现行代码:

limit = 1000
Shop.objects.filter(ID = someArray[ID])[:limit]
Run Code Online (Sandbox Code Playgroud)

干杯

Ala*_*air 12

解:

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

endoflist 是您想要的查询集.


效率:

以下是关于reverse() queryset方法的django文档.

要检索查询集中的"最后"五个项,您可以执行以下操作:

my_queryset.reverse()[:5]
Run Code Online (Sandbox Code Playgroud)

请注意,这与在Python中从序列末尾切片并不完全相同.上面的例子将首先返回最后一项,然后是倒数第二项,依此类推.如果我们有一个Python序列并查看seq [-5:],我们会先看到倒数第五个项目.Django不支持这种访问模式(从最后切片),因为它不可能在SQL中有效地执行.

所以我不确定我的答案是否效率低,效率极低.我移动order_by到最后的查询,但我不确定这是否有所作为.