gpt4 book ai didi

python - Django - 单独使用日期部分分组

转载 作者:太空狗 更新时间:2023-10-29 19:36:13 25 4
gpt4 key购买 nike

MyModel.objects.filter(created_at__gte='2011-03-09', created_at__lte='2011-03-11').values('created_at','status').annotate(status_count=Count('status'))

上述查询的 created_at 日期时间字段有问题。是否可以调整上述查询以在执行分组依据时忽略时间值并单独使用日期值?

最佳答案

我不确定 Django 的 ORM 是否可以在查询中间执行日期时间到日期的转换。不过,您可以先执行查询,获取结果,然后使用 Python groupby() 函数对返回的行进行排序。这是按日期对日期时间进行分组的一个小示例:

from pprint import pprint
from datetime import datetime
from itertools import groupby

rows = [('Frodo party', datetime(3018, 9, 22, 10, 38)),
('Nazgul defeat Rangers', datetime(3018, 9, 22, 11, 57)),
('Frodo finishes packing', datetime(3018, 9, 23, 10, 59)),
('Gandalf tames Shadowfax', datetime(3018, 9, 23, 13, 11)),
('Gandalf crosses the Isen', datetime(3018, 9, 24, 18, 46))]

for key, values in groupby(rows, key=lambda row: row[1].date()):
print('-')
pprint(key)
pprint(list(values))

如您所见,您必须为 groupby() 提供一个 key 函数,该函数接受它正在分组的对象之一并提取值应该进行分组——在本例中,它使用 [1] 获取每行中的第二个项目,然后调用 Python datetime 方法 date() 在它上面提取没有小时和分钟的日期部分。脚本的输出如下所示(pprint() 函数只是一个奇特的“打印”语句,用于缩进输出,您的 Django 代码中不需要它!):

-
datetime.date(3018, 9, 22)
[('Frodo party', datetime.datetime(3018, 9, 22, 10, 38)),
('Nazgul defeat Rangers', datetime.datetime(3018, 9, 22, 11, 57))]
-
datetime.date(3018, 9, 23)
[('Frodo finishes packing', datetime.datetime(3018, 9, 23, 10, 59)),
('Gandalf tames Shadowfax', datetime.datetime(3018, 9, 23, 13, 11))]
-
datetime.date(3018, 9, 24)
[('Gandalf crosses the Isen', datetime.datetime(3018, 9, 24, 18, 46))]

关于python - Django - 单独使用日期部分分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5257128/

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