【发布时间】:2019-12-28 11:03:38
【问题描述】:
我有两个查询集,我想从这两个查询集中进行加法,但一个查询值是 Int 类型(例如 1.5, 2.75 ),但其他查询值像字符串(例如 12:20:59)。我需要将该字符串转换为 Int 类型,以便在 Annotate 中使用 Sum 函数。
第一个查询集
timesheet_total_by_project = TimesheetEntry.objects.filter(
created_by_id=current_user,
timesheet__for_date__gte=start_tim,
timesheet__for_date__lte=end_date,
project__is_visible=True
).values(
'project__name', 'project__id'
).distinct().annotate(totalsum=Sum('minutes', output_field=FloatField()) / 60.0)
第二个查询集
ticket_total_time = Ticket.objects.filter(
assigned_to=user, total_time__isnull=False, project__is_visible=True
).values(
'title','project__id'
).distinct().annotate(totalsum=Sum('total_time', output_field=FloatField()) / 60.0)
我试过了
def get_sec(time_str):
print("string",time_str)
"""Get Seconds from time."""
h, m, s = time_str.split(':')
return int(h) * 3600 + int(m) * 60 + int(s)
ticket_total_time = Ticket.objects.filter(assigned_to=user,total_time__isnull=False,project__is_visible=True).values('title','project__id').distinct().annotate(totalsum=Sum(get_sec('total_time'), output_field=FloatField()) / 3600.0)
预期输出为 12.5 但输出 print("string",time_str)
string total_time
也说
ValueError: not enough values to unpack (expected 3, got 1)
【问题讨论】:
-
这不是一件有意义的事情。一个annotate函数被翻译成SQL并应用到数据库中;你不能在那里传递任意 Python 函数。
-
@DanielRoseman 我明白这一点。但是,由于我想将字符串类型值之类的“时间”转换为整数,有什么方法可以将该值转换为整数,以便我可以在注释中执行求和?
-
你确定这是一个字符串而不是一个时间吗?展示模型。
-
`starting_time = models.DateTimeField(null=True, blank=True) Finish_time = models.DateTimeField(null=True, blank=True) total_time = models.TextField(blank=True, null=True ) `
-
奇怪,为什么是TextField?
标签: python django type-conversion django-queryset