Агрегатная сумма в Django. Сумма объектов с одинаковым именем

У меня есть следующий QuerySet, это список покупок:

<QuerySet
    [
    <Cart_object: {name: 'Apple', amount: 10}, {name: 'Bananas', amount: 20},
    <Cart_object: {name: 'Bananas', amount: 10}>
    ]
>

Я применяю к нему следующий код и получаю сумму всех продуктов для каждого из объектов:

for obj in cart:
    from_cart = UserProduct.objects.filter(obj=obj).aggregate(Sum('amount'))
    print(from_cart)

Выход:

{'amount__sum': 30}
{'amount__sum': 10}

Вопрос заключается в следующем. Как использовать агрегат (Sum('amount')) для добавления только тех объектов, которые имеют одинаковое "имя". Чтобы получить один объект Cart_object, в котором 'Apple' = 10, а 'Bananas' = 30 (Так как есть записи с одинаковым именем)

<Cart_object: {name: 'Apple', amount: 10}, {name: 'Bananas', amount: 30}>

пробовали ли вы использовать выражение GROUP BY?

UserProduct.objects.values("obj").annotate(sum=Sum('amount')).order_by("obj")

SQL-команда для этого - SELECT "userproduct"."name", SUM("userproduct"."amount") AS "the_amount" FROM "table" GROUP BY "userproduct"."name".

Что вы можете иметь с Django, если сделаете:

from django.db.models import Sum
UserProduct.objects.values('name').annotate(the_amount=Sum('amount'))
Вернуться на верх