Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取django查询的最后n个对象?_Django_Python 3.x - Fatal编程技术网

如何获取django查询的最后n个对象?

如何获取django查询的最后n个对象?,django,python-3.x,Django,Python 3.x,我试图在django中显示聊天日志。我可以通过这个查询以正确的顺序获取我的整个聊天日志 latest_chats_list = Chat.objects.order_by('timestamp') 我想要这一行的功能(按顺序最后10个元素),但django不允许负索引 latest_chats_list = Chat.objects.order_by('timestamp')[-10:] 如果我尝试这句话,我会得到我想要的信息,但它们的顺序不对 latest_chats_list = Cha

我试图在django中显示聊天日志。我可以通过这个查询以正确的顺序获取我的整个聊天日志

latest_chats_list = Chat.objects.order_by('timestamp')
我想要这一行的功能(按顺序最后10个元素),但django不允许负索引

latest_chats_list = Chat.objects.order_by('timestamp')[-10:]
如果我尝试这句话,我会得到我想要的信息,但它们的顺序不对

latest_chats_list = Chat.objects.order_by('-timestamp')[:10]
这行给出了前10次聊天,而不是最近的

latest_chats_list = Chat.objects.order_by('-timestamp')[:10].reverse()
编辑(来自评论) 为什么不用Django的

因为它会干扰SQL查询,就像
queryset.order\u by()
一样。切片查询集(
[:10]
)也会更改SQL查询,在其中添加
限制
偏移量
。这两者可以以不明显的预期方式结合起来


另一方面,内置的Python函数只会改变queryset的迭代方式,根本不会影响SQL。

谢谢!这是可行的,但我有一些问题。为什么您决定按id而不是时间戳订购?为什么使用reversed(last_ten)和last_ten.reverse()的行为不同?
queryset.reverse()
queryset.order_by()
一样会影响SQL查询。切片查询集(
[:10]
)也会更改SQL查询,在其中添加
限制
偏移量
。这两者可以以不明显的预期方式结合起来<另一方面,code>reversed(iterable)只会改变queryset的迭代方式,根本不会影响SQL。Ref:这是一个很好的解释,说明了这段代码的作用,但不幸的是,它位于注释中,而不是您答案中的代码附近。对于这个问题的未来访客,您能将解释整合到您的答案中吗?如果我的id是UUID怎么办?这个答案不是泛泛的。
last_ten = Chat.objects.all().order_by('-id')[:10]
last_ten_in_ascending_order = reversed(last_ten)