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'))
我有以下 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'))