gpt4 book ai didi

django - 切片后重新排序查询集

转载 作者:行者123 更新时间:2023-12-04 09:04:46 25 4
gpt4 key购买 nike

我从按日期时间字段排序的 Foo 模型中获取最新的 5 行。

qs = Foo.objects.all()[:5]

在接下来的步骤中,我想通过其他一些条件(实际上,通过相反方向的相同日期时间字段)对查询集重新排序。但是不允许在切片后重新排序。 reverse() 撤消第一次排序,给我一个不同的查询集。有没有办法在不从查询集中创建列表并使用它进行排序的情况下完成我想要的?

最佳答案

order_by 为您提供 SQL 数据库内排序。您已经在使用它,然后对其进行切片。在这一点上,结果被检索到内存中。如果要更改它们的顺序,则需要使用 Python 内存中排序来完成,而不是 ORM 数据库中排序。

在您的情况下,Daniel 已经给出了最佳解决方案:因为您只想按同一字段排序,但按其他顺序排序,只需反转您拥有的列表:

qs = Foo.objects.all()[:5]
objs = reversed(qs)

如果您想按其他字段排序,那么您可以使用 sorted() 函数和自定义键函数:
qs = Foo.objects.all()[:5]
objs = sorted(qs, key=lambda o: o.some_other_field)

关于django - 切片后重新排序查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/939035/

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