Django 中的总和。同名对象的总和

Aggregate Sum in Django. Sum of objects with the same name

我有以下 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')) 仅添加那些具有相同 'name' 的对象。得到一个 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'))