我正在尝试在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()
答案 0 :(得分:7)
last_ten = Chat.objects.all().order_by('-id')[:10]
last_ten_in_ascending_order = reversed(last_ten)
为什么不使用Django' s queryset.reverse()
?
因为它与SQL查询混淆,queryset.order_by()
也是如此。切片查询集([:10]
)也会改变SQL查询,向其添加LIMIT
和OFFSET
。这两者可以以不明显的预期方式结合......
另一方面,内置的Python函数reversed(iterable)
只会改变查询集迭代的方式,而不会影响SQL。