可以说我正在实现一个消息流,按ID升序对记录进行排序,每个获取请求,我只希望获取最新的10条记录。
我试过了:
Messages.objects.filter(since=since)[:-10]
我有一个错误,说不支持负索引。
我当前的解决方法是按降序排列ID,然后运行:
Messages.objects.filter(since=since)[:10]
但这需要前端再次颠倒顺序。
我的问题是,有一种优雅的方法吗?
Answers:
或使用[::-1]
代替reversed
:
last_ten = Messages.objects.filter(since=since).order_by('-id')[:10][::-1]
[:10]
切片后,它成为常规列表,不再是Django查询集
last_ten = Messages.objects.filter(since=since).order_by('-id')[:10:-1]
。我使用标准列表对其进行计时,速度提高了9倍。
如果您希望最后的X条记录按id降序排列,那么我认为您不需要,因为filter
last_ten = Messages.objects.all().order_by('-id')[:10]
使用 -id将按降序排序。希望这会有所帮助!
where
子句,而上面的查询是带order by
子句的普通选择