让我说我正在实现一个消息流,记录按ID升序排序,每个获取请求,我想只允许获取最新的10条记录。
我试过了:
Messages.objects.filter(since=since)[:-10]
我有一个错误,说不支持否定索引。
我当前的解决方法是排序ID降序,然后运行:
Messages.objects.filter(since=since)[:10]
但这需要前端再次颠倒订单。
我的问题是,有一种优雅的方式吗?
答案 0 :(得分:69)
您可以将查询集传递给reversed:
last_ten = Messages.objects.filter(since=since).order_by('-id')[:10]
last_ten_in_ascending_order = reversed(last_ten)
答案 1 :(得分:34)
或使用[::-1]
代替reversed
:
last_ten = Messages.objects.filter(since=since).order_by('-id')[:10][::-1]
答案 2 :(得分:15)
如果您希望最后X条记录按 ID 的降序排序,那么我认为您不需要,因为过滤器
last_ten = Messages.objects.all().order_by('-id')[:10]
使用 -id 将按降序排序。 希望这有用!!