我在应用程序中定义了几个模型:
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中此类聚合的最佳方法是什么?
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)