类型错误: +: 'int' 和 'Time' 的操作数类型不受支持。



我想在我的表中记录分钟数。

class Time(models.Model):
value = models.PositiveIntegerField(null=True)

我试图在deffunction:

中对分钟求和
def sum(request):
times = ..._set.all()
for time in times:
total_min = total_min + time
然后是TypeError:

不支持+:'int'和'Time'的操作数类型。

出现问题是因为我试图总结不同类型的值:int +对象类型。为了解决这个问题,我需要将对象模型PositiveIntegerField转换为int。但如何在deffunction中,而不是在课堂上做呢?

此处timeTime对象,不能同时添加intTime对象。你能做的就是取Time对象的.value。因为.value可以是None,所以如果值是None0,我们应该使用time.value or 0来添加0,所以:

def sum(request):
some_object = …
total_min = 0
for time in some_object.time_set.all():
total_min +=time.value or 0

但是这不是很有效:它需要从数据库中获取所有的Time对象,然后在Django/Python层执行聚合。您可以在数据库端使用Sum来完成此操作表达式[Django-doc]in an.aggregate(…)条款<一口>[Django-doc]:

from django.db.models import Sum
def sum(request):
some_object = …
total_min = some_object.time_set.aggregate(total=Sum('value'))['total']

注意:请不要将变量命名为sum,它会覆盖对sum的引用。内置函数[Python-doc]。例如使用sum_view.

最新更新