Ste*_*en 24 python django sum aggregation
我有一个已支付的价值清单,并希望显示已支付的总金额.我使用Aggregation和Sum来一起计算值.问题是,我只想要打印出总值,但是聚合打印出:( {'amount__sum': 480.0}480.0是总增加值.
在我看来,我有:
from django.db.models import Sum
total_paid = Payment.objects.all.aggregate(Sum('amount'))
Run Code Online (Sandbox Code Playgroud)
为了显示页面上的值,我有一个mako模板,其中包含以下内容:
<p><strong>Total Paid:</strong> ${total_paid}</p>
Run Code Online (Sandbox Code Playgroud)
如何让它显示480.0而不是{'amount__sum': 480.0}?
jpr*_*itt 34
我不相信有办法只获得价值.
你可以${{ 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
meh*_*met 18
给它一个名字,然后要求它:
total_paid = Payment.objects.all.aggregate(sum=Sum('amount'))['sum']
Run Code Online (Sandbox Code Playgroud)
应该更具可读性,并且不需要转换.
nim*_*smi 17
该aggregate()方法返回一个字典.如果你知道你只返回一个你可以使用的单项词典.values()[0].
在Python 2中:
total_paid = Payment.objects.aggregate(Sum('amount')).values()[0]
Run Code Online (Sandbox Code Playgroud)
在Python 3中,(感谢@lmiguelvargasf)这需要:
total_paid = list(Payment.objects.aggregate(Sum('amount')).values())[0]
Run Code Online (Sandbox Code Playgroud)
最终结果与@ jproffitt的答案相同,但它避免重复该amount__sum部分,因此它更通用一些.
| 归档时间: |
|
| 查看次数: |
18677 次 |
| 最近记录: |