有谁知道我如何根据今天的日期对我的 django 查询集进行排序(在这种情况下是日期)?
class Person(models.Model):
name = models.CharField(max_length=50)
date = models.DateField()
我的目标是列出名称和日期条目。列表顶部将是日期最接近今天日期(日/月)的条目。
有谁知道我如何根据今天的日期对我的 django 查询集进行排序(在这种情况下是日期)?
class Person(models.Model):
name = models.CharField(max_length=50)
date = models.DateField()
我的目标是列出名称和日期条目。列表顶部将是日期最接近今天日期(日/月)的条目。
您可以使用额外的查询集方法从数据库表中选择其他数据。
这是适用于 MySql 的示例:
Person.objects.extra(select={
'datediff': 'ABS(DATEDIFF(date, NOW()))'}).order_by('datediff')
DATEDIFF - 返回两个日期之间的天数差,ABS - 返回绝对值。对于 sqlite,有不同的语法,请参阅此答案。
编辑:使用当年
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')
如果要根据日期排序,可以按以下顺序排序:.order_by('date')
在结果查询集上。
我不确定这是否能回答你的问题。如果您的意思是只想选择日期为今天的人员,您可以使用:
import datetime
now = datetime.datetime.now()
persons_with_date_today = Person.objects.filter(date=now)