python - 如何在 django 中计算时间
问题描述
我有这样的表:
id | name | time |
1 | aaaa | 00:36:00 |
2 | aaaa | 01:00:00 |
3 | cccc | 00:10:00 |
4 | bbbb | 00:30:00 |
5 | cccc | 00:30:00 |
如何计算 Django 中每个名称的时间分组,如下所示:
name | time |
aaaa | 01:36:00 |
bbbb | 00:30:00 |
cccc | 00:40:00 |
在 Django 中可以吗?
谢谢你的帮助!
解决方案
如果您想按确切时间进行分组( Django Docs ),那么您可以像这样简单地聚合:
from django.db.models import Count
Model.objects.all().values("time").annotate(Count("id")).order_by()
То 聚合DateTimeField
,TimeField
我们也可以使用(Django 文档)函数。将日期截断为重要组成部分。Trunc
类 Trunc(表达式,种类,output_field=None,tzinfo=None,is_dst=None,**额外)
Trunc采用单个表达式,表示DateField、TimeField或DateTimeField,一种表示日期或时间部分的种类,以及一个 output_field ,它是DateTimeField()
、TimeField()
或DateField()
。
特定于 TimeField 使用TruncHour
,TruncMinute
或TruncSecond
参见Django Docs - 使用示例:
>>> from datetime import date, datetime >>> from django.db.models import Count >>> from django.db.models.functions import ( ... TruncDate, TruncDay, TruncHour, TruncMinute, TruncSecond, ... ) >>> from django.utils import timezone >>> import pytz >>> start1 = datetime(2014, 6, 15, 14, 30, 50, 321, tzinfo=timezone.utc) >>> Experiment.objects.create(start_datetime=start1,start_date=start1.date()) >>> melb = pytz.timezone('Australia/Melbourne') >>> Experiment.objects.annotate( ... date=TruncDate('start_datetime'), ... day=TruncDay('start_datetime', tzinfo=melb), ... hour=TruncHour('start_datetime', tzinfo=melb), ... minute=TruncMinute('start_datetime'), ... second=TruncSecond('start_datetime'), ... ).values('date', 'day', 'hour', 'minute', 'second').get() {'date': datetime.date(2014, 6, 15), 'day': datetime.datetime(2014, 6, 16, 0, 0, tzinfo=<DstTzInfo 'Australia/Melbourne' AEST+10:00:00 STD>), 'hour': datetime.datetime(2014, 6, 16, 0, 0, tzinfo=<DstTzInfo 'Australia/Melbourne' AEST+10:00:00 STD>), 'minute': 'minute': datetime.datetime(2014, 6, 15, 14, 30, tzinfo=<UTC>), 'second': datetime.datetime(2014, 6, 15, 14, 30, 50, tzinfo=<UTC>) }
推荐阅读
- mongodb - Doctrine ODM - 浮点字段不适用于十进制字段
- angular6 - 无法在“MediaDevices”上执行“getUserMedia”:必须至少请求音频和视频之一
- c# - c#有没有办法简化嵌套函数
- python - 如何“传递”返回值?
- javascript - Is it really necessary to use the components provided by react-bootstrap?
- azure-application-insights - Azure Application Insights Rest API 获取摘要调用返回空
- c++ - (如何)我可以在不安装完整的 boost 库的情况下使用 boost::spirit X3 吗?
- r - 映射嵌套的小标题,变异并应用函数
- vb.net - System.ArgumentException: '无法绑定到 DataSource 上的属性或列 Reserve By Staff。参数名称:dataMember'
- c++ - 删除不需要的空格,但在值之间