Skip to main content
 首页 » 编程设计

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

2025年05月04日39luoye11

我有这个模型:

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有关聚合的更多信息