为 Django 查询中的每个唯一字段获取 SUM

Getting SUM for each unique fields in Django Query

我有以下 table 关系。

我想要来自 Sales_Transaction 的 total_cost 的 SUM 用于党 table 的每个 party_name。双方与销售有 1:M 关系,销售与 Sales_Transction 有 1:M 关系。

我试过这个查询,但它 returns 各方的总和:

Party.objects.aggregate(sales=Sum('sales__salestransaction__total_cost'))

这类似于这个简单的查询:

SalesTransaction.objects.aggregate(sales=Sum('total_cost'))

我想要这样的输出:

| Party Name | Total Purchase |
-----------------------------
|Party 1     | total_cost (calculated form Sales Transaction)
|Party 2     | total_cost (calculated form Sales Transaction)

如何在 Django 查询中获得这些结果?

您可以 .annotate(…) [Django-doc] Party 个对象:

from django.db.models import Sum

Party.objects.<strong>annotate(</strong>
    sales=Sum('sales__salestransaction__total_cost')
<strong>)</strong>

由此 QuerySet 产生的 Party 对象将有一个额外的属性 sales,其中包含该 Party 的总销售额。