假设我有两种型号:电脑和日常用品。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中的微秒数
因为我在使用postgres,所以我可以使用来自django-pg-utils的
Seconds
:相关问题 更多 >
编程相关推荐