Django Postgres:如何按日期对启用时区的datetime字段进行分组
我对prostgresql和django有这样的问题: 我有很多事件是在某个日期、某个时间创建的,它们存储在datetime字段Django Postgres:如何按日期对启用时区的datetime字段进行分组,django,postgresql,orm,Django,Postgresql,Orm,我对prostgresql和django有这样的问题: 我有很多事件是在某个日期、某个时间创建的,它们存储在datetime字段created中 我希望根据创建的字段的日期部分进行聚合。最简单的例子是:这个月每天有多少事件? 所创建的字段可识别时区。因此,结果应该根据用户所在的时区而变化。例如,如果您在2017-10-02 UTC时间23:30创建了两个事件,如果您从UTC-1查看它们,您应该在10月3日00:30看到它们,并且总数应该在第3天相加 我正在努力找到一个解决这个问题的方法,它可
created
中
- 我希望根据
创建的
字段的日期部分进行聚合。最简单的例子是:
这个月每天有多少事件?
- 所创建的
字段可识别时区。因此,结果应该根据用户所在的时区而变化。例如,如果您在2017-10-02 UTC时间23:30创建了两个事件,如果您从UTC-1查看它们,您应该在10月3日00:30看到它们,并且总数应该在第3天相加
SELECT count(*) from table GROUP BY date
现在我找到了问题第一部分的解决方案:
from django.db import connection
truncate_date = connection.ops.date_trunc_sql('day', 'created')
queryset = queryset.extra({'day': truncate_date})
total_list = list(queryset.values('day').annotate(amount=Count('id')).order_by('day'))
是否有方法将date_trunc_sql函数用于计算日期的时区添加到该值中?或者在date\u trunc\u sql之前使用其他函数,然后链接该函数
谢谢 您可能正在寻找以下内容: 但是请记住,这可能与django的配置方式冲突 Django 2.2+支持带时区的数据库功能 现在,您可以执行以下操作:
import pytz
east_coast = pytz.timezone('America/New_York')
queryset.annotate(created_date=TruncDay("created", tzinfo=east_coast))
.values("created_date")
.order_by("created_date")
.annotate(count=Count("created_date"))
.order_by("-created_date")
谢谢这些链接很有用,我找到了一种使用
date\u trunc\u sql
解决问题的方法。这篇文章中的评论也有所帮助。我看到有一个connection.ops.datetime\u trunc\u sql函数,它将时区作为参数,但我无法使其工作。你知道怎么做吗?之后,它在queryset=queryset.extra({'day':truncate\u date})行上关闭了连接。确认此特定行不应调用SQL查询。不过我可能错了。有一件事我会尝试将其包装在事务中。