python - 我如何总结 Django 模型的内容

标签 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

这是我想计算表中总金额的 View :

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)

这会单独打印表格中的金额。 如何获取总数并将其分配给 total 变量?

最佳答案

在您发布的代码中,每次循环都设置total = 0

for instance in queryset:
    total = 0
    total += instance.amount
    print total

将该行移到循环之外,这将按您预期的方式工作。

稍微好一点的方法是获取一个 values_list 并求和:

amounts = Transfer.objects.values_list('amount', flat=True)
total = sum(amounts)

更好的方法是让数据库完成工作并使用 Sum 聚合:

from django.db.models import Sum
total = Transfer.objects.aggregate(Sum("amount"))

参见 documentation有关聚合的更多信息

关于python - 我如何总结 Django 模型的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42355050/

相关文章:

mysql - 如何将 "sickness time"汇总到命令末尾 - mysql

python - 在 Python 中为稀疏数组优化 `__getitem__` 和 `__setitem__`

从 facebook oauth 重定向时 django session 丢失

python - Unicode解码错误: Django Generate PDF with weasyprint

带有自引用对象的 Django 休息框架嵌套序列化器

c++ - 如何在这种情况下存储数组的和

python - 为什么 django 会在新创建的对象上给我一个 ObjectDoesNotExist 错误?

python - 序列中的第 N 个 1

python - 为什么 split is_text_present() 会导致 Firefox 间歇性出现 StaleElementReferenceException(但 Chrome 或 phantomjs 不会)?

r - 忽略dplyr行总和中的NA