聚合具有相同字段值的查询项

Aggregating query items with the same field value

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

<QuerySet [{'name': 'John', 'products': 4}, {'name': 'John', 'products': 6}, {'name': 'Sam', 'products': 7}, ...]>

我如何聚合这些数据以获得具有相同 name 字段的元素的 Sum()products 值的组合,以避免查询集中的重复,因此我将有这样的东西:

<QuerySet [{'name': 'John', 'products': 10}, {'name': 'Sam', 'products': 7}, ...]>

我知道这应该使用 .annotate().aggregate() 查询来完成,但我不知道如何做。

你需要的是annotate,你可以这样做:

from django.db.models import Sum

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

您可以通过查看 docs

了解更多信息

你可以构造这样的查询集:

from django.db.models import Sum

Model.objects.values('name').annotate(
    <b>sum_products=Sum('products')</b>
).order_by(<b>'name'</b>)

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