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