Django在注释中将timedelta转换为整数 [英] Django convert timedelta to integer in annotation
问题描述
我要注释两个日期之间的差异,然后汇总四舍五入的平均值.问题在于两个日期之间的差异是 datetime.timedelta
,所以我得到了错误:
I'm annotating the difference between two dates then aggregating the rounded average. The problem is that the difference between the two dates is a datetime.timedelta
so I am getting the error:
django.db.utils.ProgrammingError:无法将类型间隔强制转换为数字
django.db.utils.ProgrammingError: cannot cast type interval to numeric
如何在 Avg()
中使用整数 days_to_pay.days
?
def aggregate_ar_detail(self):
queryset = self.annotate(
days_to_pay=Case(
When(Q(date_paid__isnull=False), then=F('date_paid') - F('date_trans')),
default=None,
)
).aggregate(
avg_days=Round(Avg('days_to_pay')),
)
我尝试在 models.IntegerField()
的注解中指定输出字段,但这会导致:
I've tried specifying the output field on the annotation a models.IntegerField()
but it causes:
TypeError:float()参数必须是字符串或数字,而不是'datetime.timedelta'
TypeError: float() argument must be a string or a number, not 'datetime.timedelta'
推荐答案
Managed to get it working with ExtractDay
from django.db.models.functions import ExtractDay
def aggregate_ar_detail(self):
queryset = self.annotate(
days_to_pay=Case(
When(Q(date_paid__isnull=False), then=F('date_paid') - F('date_trans')),
default=None,
)
).aggregate(
avg_days=Round(Avg(ExtractDay('days_to_pay'))),
)
这篇关于Django在注释中将timedelta转换为整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!