Sum记录Django中的值

akr*_*nov 1 python django

我在应用程序中定义了几个模型:

class Project(models.Model):
    title   = models.CharField(max_length=150)
    url     = models.URLField()
    manager = models.ForeignKey(User)

class Cost(models.Model):
    project = models.ForeignKey(Project)
    cost    = models.FloatField()
    date    = models.DateField()
Run Code Online (Sandbox Code Playgroud)

我想对每个项目的成本求和并提供值view.py

from mypm.costs.models import Project, Cost
from django.shortcuts import render_to_response
from django.db.models import Avg, Sum

def index(request):
    # ...
    return render_to_response('index.html',...
Run Code Online (Sandbox Code Playgroud)

解决Django ORM中此类聚合的最佳方法是什么?

Dan*_*man 5

Alexander的解决方案将为您提供正确的结果,但每个项目都会有一个查询。用于 annotate在单个查询中完成整个操作。

from django.db.models import Sum

annotated_projects = Project.objects.all().annotate(cost_sum=Sum('cost__cost'))
for project in annotated_projects:
    print project.title, project.cost_sum
Run Code Online (Sandbox Code Playgroud)