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

我已尝试在注释a
models.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'))),
    )