汇总具有相同字段值的查询项

问题描述 投票:1回答:2

我的一个查询集返回具有多个字段的项目列表:

<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()查询来完成此操作,但我不知道该如何做。

django django-orm aggregation
2个回答
2
投票

您可以使用以下方法构造这样的查询集:

from django.db.models import Sum

Model.objects.values('name').annotate(
    sum_products=Sum('products')
).order_by('name')

[.order_by(..)是强制Django使用GROUP BY子句所必需的。


2
投票

您需要的是annotate,您可以执行以下操作:

from django.db.models import Sum

your_queryset = YourModel.objects.annotate(total_products=Sum('products')).values_list('name', 'total_products')

您可以通过查看docs了解更多信息>

© www.soinside.com 2019 - 2024. All rights reserved.