[이케아 프로젝트] aggregate

hyuckhoon.ko·2020년 7월 15일
0

What I learned in wecode

목록 보기
90/109

1. 장고 aggregate

장고 ORM 기능 중 하나인 aggregate을 사용하여
장바구니 품목들의 총합을 구해보자.

Order는 Product의 외래키를 갖고 있다.
Order에서 Product의 필드 중 하나인 price를 가져와야 한다.





2. 코드(수량 미반영)

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'))



3. 코드 수정(수량 반영)

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']

0개의 댓글