gpt4 book ai didi

django - 如何根据今天的日期对我的 Django 查询集进行排序?

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

有谁知道我如何根据今天的日期对我的 django 查询进行排序(在本例中为日期)?

class Person(models.Model):
name = models.CharField(max_length=50)
date = models.DateField()

我的目标是列出名称和日期条目。列表顶部将是日期最接近今天日期(日/月)的条目。

最佳答案

您可以使用 extra queryset 方法从数据库表中选择附加数据。

这是适用于 MySql 的示例:

Person.objects.extra(select={
'datediff': 'ABS(DATEDIFF(date, NOW()))'}).order_by('datediff')

DATEDIFF - 返回两个日期之间的天数差异,
ABS - 返回绝对值。对于 sqlite,有不同的语法,参见 answer .

编辑:使用当前年份
Person.objects.extra(select={
'datediff': "ABS(DATEDIFF(CONCAT(YEAR(now()), '-', MONTH(date), '-', DAY(date)), NOW()))"}
).order_by('datediff')

编辑 2:优化 *
from datetime import date
dayofyear = int(date.today().strftime("%j"))

datediff = 'LEAST(ABS(DAYOFYEAR(date) - %d), ABS((366 - %d + DAYOFYEAR(date))) MOD 366)' % (
dayofyear, dayofyear
)
Person.objects.extra(select={'datediff': datediff}).order_by('datediff')

编辑 3:给定(今天)日期之后的最近日期
    from datetime import date
dayofyear = int(date.today().strftime("%j"))

datediff = '(DAYOFYEAR(date) - %d + 365) MOD 365' % (
dayofyear
)
Persion.objects.extra(select={'datediff': datediff}).order_by('datediff')

关于django - 如何根据今天的日期对我的 Django 查询集进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911791/

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