您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Django-仅按日期部分分组

Django-仅按日期部分分组

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

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],然后调用它的Pythondatetime方法date()提取日期部分,而不需要小时和分钟。脚本的输出看起来像这样(该pprint()函数只是一个花哨的“ print”语句,它使输出缩进,在您的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))]
Go 2022/1/1 18:44:16 有502人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶