sim*_*vic 2 python django sum calculation
我有这个模型:
class Transfer(models.Model):
transfer_code = models.CharField(max_length=30, blank=True, null=True)
sender_name = models.CharField(max_length=30, blank=True, null=True)
amount = models.IntegerField(blank=True, null=True)
recipient_name = models.CharField(max_length=30, blank=True, null=True)
time_sent = models.DateTimeField(auto_now_add=True, auto_now=False)
received = models.BooleanField(default=False)
time_received = models.DateTimeField(auto_now_add=False, auto_now=False, null=True)
def __unicode__(self):
return self.transfer_code
Run Code Online (Sandbox Code Playgroud)
这是我想计算表中总金额的视图:
def listtransfersall(request):
title = 'ALL TRANSFERS'
queryset = Transfer.objects.all()
for instance in queryset:
total = 0
total += instance.amount
print total
context = {
"title": title,
"queryset": queryset,
"total": total,
}
return render(request, "listtransfersall.html",context)
Run Code Online (Sandbox Code Playgroud)
这将单独打印表中的金额。如何获得总数并将其分配给 total 变量?
在您发布的代码中,您total = 0每次都通过循环进行设置
for instance in queryset:
total = 0
total += instance.amount
print total
Run Code Online (Sandbox Code Playgroud)
将该行移到循环之外,这将按照您的预期工作。
稍微好一点的是得到一个values_list和总和:
amounts = Transfer.objects.values_list('amount', flat=True)
total = sum(amounts)
Run Code Online (Sandbox Code Playgroud)
更好的是让数据库完成工作并使用 Sum 聚合:
from django.db.models import Sum
total = Transfer.objects.aggregate(Sum("amount"))
Run Code Online (Sandbox Code Playgroud)
有关聚合的更多信息,请参阅文档