Django在注释中将时间增量转换为整数
我在注释两个日期之间的差异,然后将四舍五入的平均值相加。问题是这两个日期之间的差异是一个Django在注释中将时间增量转换为整数,django,Django,我在注释两个日期之间的差异,然后将四舍五入的平均值相加。问题是这两个日期之间的差异是一个datetime.timedelta,因此我得到了错误: django.db.utils.ProgrammingError:无法将类型interval强制转换为数字 如何使用Avg()中的整数days\u to_pay.days 我已尝试在注释amodels.IntegerField()上指定输出字段,但它会导致: TypeError:float()参数必须是字符串或数字,而不是“datetime.timed
datetime.timedelta
,因此我得到了错误:
django.db.utils.ProgrammingError:无法将类型interval强制转换为数字
如何使用Avg()
中的整数days\u to_pay.days
我已尝试在注释amodels.IntegerField()
上指定输出字段,但它会导致:
TypeError:float()参数必须是字符串或数字,而不是“datetime.timedelta”
设法让它工作起来
这里的答案有用吗?老实说,我不知道这是不是一个重复,所以没有标记yet@ggdx相同的语言和相同的问题,但完全不同的解决方案。我的问题中还包括使用
.days
(链接中的解决方案)。当我想将持续时间从秒转换为分钟时,遇到了类似的问题。为了使用Extract方法,我必须指定一个输出字段:self.annotate(duration\u minutes=ExpressionWrapper(Max('date\u time')-Min('date\u time'),output\u field=DurationField())
。我没有运行您的代码,但您的答案中是否缺少ExpressionWrapper?(当然也可能是,F()-F()
的返回值不同于Min()-Max()
)
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')),
)
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'))),
)