我想在顶部显示接近今天日期的记录,然后在底部显示过去的所有记录:
今天
明天
明天+1
.
.
.
昨天
昨天-1
最佳答案
是的,您可以,您想要的是 order_by 的下降行为.
最早的项目优先。
Model.objects.order_by('creation_time')
最新商品优先。(你想要什么)
Model.objects.order_by('-creation_time')
供您编辑
你必须进行两个查询,然后将它们评估为列表来做你想做的事情,你不能用 django ORM 的查询做这样的事情。
事实上,使用 | 运算符组合查询不会保留您想要的顺序,因此您不能使用 2 个 django 查询来执行此操作。
qset = Model.objects.all()
result = qset.filter(creation=today) | qset.filter(creation_gte=today) | qset.filter(creation_lt=today)
以下结果
将包含您想要的所有项目,但不会保留单个查询集排序。所以,不会做你想从中得到的东西。
总而言之,您必须评估查询集,并将它们作为列表添加在一起以实现您想要的结果。
qset = Model.objects.all()
result = list(qset.filter(creation=today)) + list(qset.filter(creation_gte=today)) + list(qset.filter(creation_lt=today))
或者以更好的方式:
import itertools
result = list(itertools.chain(qset.filter(creation=today), qset.filter(creation_gte=today), qset.filter(creation_lt=today)))
不要忘记在每个查询集中执行 order_by
以根据需要对结果的每个部分进行排序,为了代码的简洁,我没有在这里写它们。
关于python - Django queryset order_by 日期接近今天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39550997/