python - Django queryset order_by 日期接近今天

标签 python django sorting sql-order-by

我想在顶部显示接近今天日期的记录,然后在底部显示过去的所有记录:

今天
明天
明天+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/

相关文章:

python - 在 python 中,如何创建一个在运行时之前未指定名称的新变量(编辑 : How do you use setattr() with a list compehension)?

python - 查找字符 ASCII 值最接近的质数 --- Python

mysql - 没有外键的简单 django 连接查询

python - 找不到 Django==2.2 的匹配分布

java - 无法按升序对列表进行排序

java - 解析和排序后在行之间获取 0.0

c - 在 C 中对 double 组进行排序

python - 新的 Python Gmail API - 只检索昨天的邮件

python - setuptools和pip的依赖解析的区别

python - Django 使用错误的 python 版本运行