如何将DurationField的值转换为QuerySet中的微秒/分钟数?

2024-06-14 09:06:33 发布

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

假设我有两种型号:电脑和日常用品。DailyUsage有一个名为usage_duration的DurationField。在一组计算机上,我想在分钟内注释平均每日使用量。平均每天使用电脑的时间每增加一分钟,电脑的“重要性”就会增加

我见过一些人使用ExpressionWrapper将DurationField转换为其BigIntegerField表示的示例*,但尝试了以下方法:

average_in_duration_annotated = Computer.objects.annotate(
    avg=Avg("daily_usages__usage_duration", filter=Q(daily_usages__date__gte=one_month_ago))
)

average_in_minutes_annotated = average_annotated.annotate(
    avg_in_minutes=ExpressionWrapper(F("avg"), output_field=BigIntegerField()) / Value(10e6 * 60)
)

。。。结果:

{TypeError}int() argument must be a string, a bytes-like object or a number, not 'datetime.timedelta'当对查询集求值时

另一个以同样方式失败的示例:

Computer.objects.annotate(
    total_usage_microseconds=Sum("daily_usages__usage_duration", output_field=BigIntegerField())
)

如何将DurationField的值转换为QuerySet中的微秒数

*Aggregate in django with duration field


Tags: in示例fieldusageavgdailydurationaverage