我有一个值已支付的列表,并希望显示已支付的总额。我使用聚合和Sum一起计算值。问题是,我只想打印出总价值,但是聚合打印出来:{'amount__sum': 480.0} (480.0是增值总额)。
在我看来,我有:
from django.db.models import Sum
total_paid = Payment.objects.all.aggregate(Sum('amount'))为了在页面上显示值,我有一个mako模板,它包含以下内容:
<p><strong>Total Paid:</strong> ${total_paid}</p>我怎样才能让它显示给480.0而不是{'amount__sum': 480.0}
发布于 2013-10-02 13:56:11
我不相信有办法只得到价值。
您可以在模板中执行${{ total_paid.amount__sum }}。或者在您的视图中执行total_paid = Payment.objects.all().aggregate(Sum('amount')).get('amount__sum', 0.00)。
编辑
正如其他人所指出的,.aggregate()将始终返回一个字典,其中包含来自当前聚合的所有键,因此对结果执行.get()是不必要的。但是,如果查询集为空,则每个聚合值将为None。因此,根据您的代码,如果您期望得到一个浮动,您可以这样做:
total_paid = Payment.objects.all().aggregate(Sum('amount'))['amount__sum'] or 0.00
发布于 2016-06-10 15:20:35
给它起个名字,然后问它:
total_paid = Payment.objects.all.aggregate(sum=Sum('amount'))['sum']应该很少有更多的可读性,而且不需要转换。
发布于 2014-09-25 16:18:34
aggregate()方法返回一个字典。如果你知道你只返回一个条目字典,你可以使用.values()[0]。
在Python 2中
total_paid = Payment.objects.aggregate(Sum('amount')).values()[0]在Python3中,(谢谢@lmiguelvargasf)需要这样做:
total_paid = list(Payment.objects.aggregate(Sum('amount')).values())[0]最终结果与@jproffitt的答案相同,但它避免了重复amount__sum部分,因此它更通用一些。
https://stackoverflow.com/questions/19138609
复制相似问题