Получение SUM для каждого уникального поля в запросе Django

У меня есть следующие табличные отношения.

enter image description here

Мне нужна SUM общей_стоимости из Sales_Transaction для каждого имени_партии из таблицы Party. Стороны имеют 1:M отношение с продажами, а продажи имеют 1:M отношение с Sales_Transction.

Я попробовал этот запрос, но он возвращает сумму для всех сторон:

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 Query?

Вы можете .annotate(…) [Django-doc] объекты Party с:

from django.db.models import Sum

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

Объекты Party, возникающие в результате этого QuerySet будут иметь дополнительный атрибут sales с общей суммой продаж для данного Party.

Вернуться на верх