django查询获取最后n条记录

时间:2013-12-12 22:33:56

标签: django

让我说我正在实现一个消息流,记录按ID升序排序,每个获取请求,我想只允许获取最新的10条记录。

我试过了:

Messages.objects.filter(since=since)[:-10]

我有一个错误,说不支持否定索引。

我当前的解决方法是排序ID降序,然后运行:

Messages.objects.filter(since=since)[:10]

但这需要前端再次颠倒订单。

我的问题是,有一种优雅的方式吗?

3 个答案:

答案 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 将按降序排序。 希望这有用!!