장고 ORM 기능 중 하나인 aggregate을 사용하여
장바구니 품목들의 총합을 구해보자.
Order는 Product의 외래키를 갖고 있다.
Order에서 Product의 필드 중 하나인 price를 가져와야 한다.
shopping_info = Order.objects.filter(
account_id = user_id,
status_id = Status.objects.get(name='결제진행중').id
).select_related('product', 'status')
shopping_list = [
{
"product_name" : item.product.name,
"product_description" : item.product.description,
"product_number" : item.product.product_number,
"product_price" : item.product.price,
"product_quantity" : item.quantity,
"product_image" : item.product.productimage_set.all()[0].image_url
}
for item in shopping_info
]
if shopping_list:
user = Account.objects.get(id=user_id)
sum = shopping_info.aggregate(sum=Sum('product__price'))
(가장 하단에 있는 코드)
shopping_info.aggregate(sum=Sum('product__price'))
price_quantity_table = Order.objects.annotate(
price=F('product__price')).values(
'price',
'quantity'
)
total_price = price_quantity_table.aggregate(
total=Sum(F('price') * F('quantity')))['total']