gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:44:45 24 4
gpt4 key购买 nike

我正在尝试在 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()

最佳答案

last_ten = Chat.objects.all().order_by('-id')[:10]
last_ten_in_ascending_order = reversed(last_ten)

编辑(来自评论)

为什么不使用 Django 的 queryset.reverse() ?

因为它与 SQL 查询相混淆, queryset.order_by() 也是如此。 .切片查询集( [:10] )也会改变 SQL 查询,添加 LIMITOFFSET到它。两者可以以不明显预期的方式结合......

另一方面,内置的 Python 函数 reversed(iterable) 只会改变查询集的迭代方式,根本不会影响 SQL。

关于django - 如何获取 django 查询的最后 n 个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31495586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com