Django и Aggregate: сумма различных значений?

Я пытаюсь выполнить агрегатную функцию django, но не могу получить желаемый результат.

что у меня есть:

income_posts.values_list('category__name','amount')
[(u'Donation', Decimal("2000.00")), (u'Paycheck', Decimal("1200.00")), (u'Donation', Decimal("1000.00"))]

желаемый результат:

[(u'Donation', Decimal("3000.00")), (u'Paycheck', Decimal("1200.00))]

мне нужно суммировать поля "сумма", которые имеют ту же категорию__name.

2 ответов


С ответ на вопрос:

from django.db.models import Sum
income_posts.values('category__name').order_by('category__name').annotate(total=Sum('amount'))

Если вы находитесь на Postgres, вы можете использовать django-pg-utils пакета для суммы различных значений.

from pg_utils import DistinctSum
income_posts.annotate(total=DistinctSum('amount')