Django视图嵌套元组计算

2024-04-25 19:03:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在一个通用视图中计算timedelta,但我不知道如何遍历元组并进行我正在寻找的计算。你知道吗

我正在运行的查询是

sla_list = self.object_list.filter(types__name="Unplanned").filter(service__sla=True).values_list('service__name', 'end_out', 'start_out')

返回的一个例子是。你知道吗

(u'Peoplesoft', datetime.datetime(2012, 7, 12, 1, 57, tzinfo=(UTC)), datetime.datetime(2012, 7, 11, 19, 25, tzinfo=(UTC)))

我有一个模型方法的计算,它是工作的,但对于计算,我想做的时间增量,我认为它应该被移到视图中。你知道吗

我使用的模型方法是

timedelta = self.end_out - self.start_out
timedelta = timedelta.total_seconds()
timedelta = time.strftime('%H:%M', time.gmtime(timedelta))

任何想法都会很好。谢谢。你知道吗


Tags: name模型self视图datetimeservicefilterout
1条回答
网友
1楼 · 发布于 2024-04-25 19:03:24

sla_list包含您要求的3个值,因此sla_list[1]是结束值,而start_outsla_list[2]。你知道吗

只需将您的计算应用于这两个值:

timedelta = sla_list[1] - sla_list[2]
timedelta = '%02d:%02d' % divmod(timedelta.total_seconds(), 60)

我用一个使用^{} function的更简单的方法替换了你的time.gmtime(timedelta)strftime舞蹈;你需要做的就是把总秒数转换成小时(秒除以60)和剩余秒数(秒模60)。你知道吗

如果需要对每个service__name条目的时间增量求和,请按该条目排序,然后使用^{} callable快速有效地计算总和:

from itertools import groupby
from operator import itemgetter

sla_list = self.object_list.filter(types__name="Unplanned").filter(service__sla=True).order_by('service__name').values_list('service__name', 'end_out', 'start_out')
sla_deltas = {}
for name, entries in groupby(sla_list, itemgetter(0)):
    sla_deltas[name] = sum(end - start for name, end, start in entries)

groupby函数为您提供具有匹配的sla__name值的子列表,我们只需计算每个条目的datetime.timedelta,并使用sum()计算总时间增量。你知道吗

相关问题 更多 >