首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django聚合:只有和返回值?

Django聚合:只有和返回值?
EN

Stack Overflow用户
提问于 2013-10-02 13:54:03
回答 6查看 34.9K关注 0票数 37

我有一个值已支付的列表,并希望显示已支付的总额。我使用聚合和Sum一起计算值。问题是,我只想打印出总价值,但是聚合打印出来:{'amount__sum': 480.0} (480.0是增值总额)。

在我看来,我有:

代码语言:javascript
复制
    from django.db.models import Sum

    total_paid = Payment.objects.all.aggregate(Sum('amount'))

为了在页面上显示值,我有一个mako模板,它包含以下内容:

代码语言:javascript
复制
    <p><strong>Total Paid:</strong> ${total_paid}</p>

我怎样才能让它显示给480.0而不是{'amount__sum': 480.0}

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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

票数 58
EN

Stack Overflow用户

发布于 2016-06-10 15:20:35

给它起个名字,然后问它:

代码语言:javascript
复制
total_paid = Payment.objects.all.aggregate(sum=Sum('amount'))['sum']

应该很少有更多的可读性,而且不需要转换。

票数 33
EN

Stack Overflow用户

发布于 2014-09-25 16:18:34

aggregate()方法返回一个字典。如果你知道你只返回一个条目字典,你可以使用.values()[0]

Python 2

代码语言:javascript
复制
total_paid = Payment.objects.aggregate(Sum('amount')).values()[0]

Python3中,(谢谢@lmiguelvargasf)需要这样做:

代码语言:javascript
复制
total_paid = list(Payment.objects.aggregate(Sum('amount')).values())[0]

最终结果与@jproffitt的答案相同,但它避免了重复amount__sum部分,因此它更通用一些。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19138609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档