我的一个查询集返回具有多个字段的项目列表:
<QuerySet [{'name': 'John', 'products': 4}, {'name': 'John', 'products': 6}, {'name': 'Sam', 'products': 7}, ...]>
对于具有相同Sum()
字段的元素,我该如何汇总这些数据以得到products
值的name
组合,以避免在查询集中重复,因此我将得到一些东西像这样:
<QuerySet [{'name': 'John', 'products': 10}, {'name': 'Sam', 'products': 7}, ...]>
我知道应该使用.annotate()
或.aggregate()
查询来完成此操作,但我不知道该怎么做。
答案 0 :(得分:2)
您需要的是annotate
,您可以执行以下操作:
from django.db.models import Sum
your_queryset = YourModel.objects.annotate(total_products=Sum('products')).values_list('name', 'total_products')
您可以通过查看docs
了解更多信息答案 1 :(得分:2)
您可以使用以下方法构造此类查询集:
from django.db.models import Sum
Model.objects.values('name').annotate(
sum_products=Sum('products')
).order_by('name')
.order_by(..)
是强制Django使用GROUP BY子句所必需的。