Rod*_*ini 10 python sorting django sql-order-by
我想在顶部显示接近今天日期的记录,然后在底部显示过去的所有记录:
今天
明天
明天+1
。
.
.
昨天
昨天 -1
Spi*_*Xel 18
是的,你可以,你想要的是order_by的降序行为。
首先是最古老的项目。
Model.objects.order_by('creation_time')
Run Code Online (Sandbox Code Playgroud)
最新商品优先。(你想要什么)
Model.objects.order_by('-creation_time')
Run Code Online (Sandbox Code Playgroud)
供您编辑
您必须进行两个查询,然后将它们评估为列表以执行您所需要的操作,您不能使用 django ORM 的查询执行此类操作。
事实上,使用|组合查询 运算符不会保留您想要的顺序,因此您不能使用 2 django 查询来执行此操作。
qset = Model.objects.all()
result = qset.filter(creation=today) | qset.filter(creation_gte=today) | qset.filter(creation_lt=today)
Run Code Online (Sandbox Code Playgroud)
以下result将包含您想要的所有项目,但不会保留单个查询集排序。所以,不会做你想做的事。
所以总而言之,您必须评估查询集,并将它们作为列表添加在一起以实现您想要的。
qset = Model.objects.all()
result = list(qset.filter(creation=today)) + list(qset.filter(creation_gte=today)) + list(qset.filter(creation_lt=today))
Run Code Online (Sandbox Code Playgroud)
或者以更好的方式:
import itertools
result = list(itertools.chain(qset.filter(creation=today), qset.filter(creation_gte=today), qset.filter(creation_lt=today)))
Run Code Online (Sandbox Code Playgroud)
不要忘记order_by在每个查询集中执行s 以根据需要对结果的每个部分进行排序,为了代码简洁,我没有在这里写它们。