Django 如何从生成器中获取奇异值?

Django 如何从生成器中获取奇异值?,django,python-3.x,django-models,python-3.6,Django,Python 3.x,Django Models,Python 3.6,我正在编写一个应用程序来监测家禽养殖场的鸡死亡情况,并具有以下代码: today = datetime.date.today() deaths = (sum(cd.count) for cd in ChickenDeath.objects.filter(date__gte=datetime.date(today.year, today.month, 1))) print(deaths) 我的问题是它只是打印出,而不是实际的总和。我也尝试了next(death),但是我只得到了一个错误'int'

我正在编写一个应用程序来监测家禽养殖场的鸡死亡情况,并具有以下代码:

today = datetime.date.today()
deaths = (sum(cd.count) for cd in ChickenDeath.objects.filter(date__gte=datetime.date(today.year, today.month, 1)))
print(deaths)

我的问题是它只是打印出
,而不是实际的总和。我也尝试了
next(death)
,但是我只得到了一个错误
'int'对象不可编辑
。是否有其他方法可以从该生成器获取值?

此处不应返回生成器。生成器应该是sum函数的输入

目前,您正在有效地创建一个项目列表,每个项目都是单个值的“总和”。这就是为什么你会得到关于不可数的错误;这是不可计算的
cd.count
,因为它是单个值,不能求和

我想你的意思是把所有的计数加起来:

deaths = sum(cd.count for cd in ChickenDeath.objects.filter(...))
但这不是正确的做法。您应该让数据库为您计算总和:

from django.db.models import Sum
deaths = ChickenDeath.objects.filter(...).aggregate(total=Sum('count'))
print(deaths['total'])

你根本不应该还发电机。生成器应该是sum函数的输入

目前,您正在有效地创建一个项目列表,每个项目都是单个值的“总和”。这就是为什么你会得到关于不可数的错误;这是不可计算的
cd.count
,因为它是单个值,不能求和

我想你的意思是把所有的计数加起来:

deaths = sum(cd.count for cd in ChickenDeath.objects.filter(...))
但这不是正确的做法。您应该让数据库为您计算总和:

from django.db.models import Sum
deaths = ChickenDeath.objects.filter(...).aggregate(total=Sum('count'))
print(deaths['total'])

我懂了。谢谢你的帮助,丹尼尔!顺便说一句,为什么我应该让数据库做sum而不是Python?是这样效率更高,还是有其他原因?是的,数据库正是为这类事情而优化的。否则你会要求数据库提供大量你不需要的数据。很高兴认识Daniel,我会记住这一点。再次感谢!我懂了。谢谢你的帮助,丹尼尔!顺便说一句,为什么我应该让数据库做sum而不是Python?是这样效率更高,还是有其他原因?是的,数据库正是为这类事情而优化的。否则你会要求数据库提供大量你不需要的数据。很高兴认识Daniel,我会记住这一点。再次感谢!