Django получить подсчет общего количества в корзине
Я пытаюсь получить общее количество товаров, которые я добавил в корзину.
e.g.
Item id 1 quantity 1 pc
Item id 2 quantity 1 pc
Item id 3 quantity 4 pcs
There are 6 pcs in total in cart.
На странице детализации корзины я могу получить правильный подсчет, используя эту строку
{{cart.get_total_qty}}
Это моя страница cart.py:
class Cart(object):
def __init__(self, request):
self.session = request.session
cart = self.session.get(settings.CART_SESSION_ID)
if not cart:
cart = self.session[settings.CART_SESSION_ID] = {}
self.cart = cart
def add(self, product, quantity=1, update_quantity=False):
product_id = str(product.id)
if product_id not in self.cart:
self.cart[product_id] = {'quantity': 0, 'price': str(product.price)}
if update_quantity:
self.cart[product_id]['quantity'] = quantity
else:
self.cart[product_id]['quantity'] += quantity
self.save()
def save(self):
self.session[settings.CART_SESSION_ID] = self.cart
self.session.modified = True
def remove(self, product):
product_id = str(product.id)
if product_id in self.cart:
del self.cart[product_id]
self.save()
def __iter__(self):
product_ids = self.cart.keys()
products = Product.objects.filter(id__in=product_ids)
for product in products:
self.cart[str(product.id)]['product'] = product
for item in self.cart.values():
item['price'] = Decimal(item['price'])
item['total_price'] = item['price'] * item['quantity']
item['quantity'] = int(item['quantity'])
yield item
def __len__(self):
return sum(item['quantity'] for item in self.cart.values())
def get_total_price(self):
return sum(Decimal(item['price']) * item['quantity'] for item in
self.cart.values())
def get_total_qty(self):
return sum(item['quantity'] for item in self.cart.values())
def clear(self):
del self.session[settings.CART_SESSION_ID]
self.session.modified = True
Теперь я хочу показать общее количество в корзине на навигационной панели на индексной странице. Но я не знаю, как это сделать. Используя эту строку, я получаю количество товаров {{request.session.cart|length}} вместо количества.
I tried using {{request.session.cart}} and the result was:
{'1':{'quantity':1,'price':'9,99'}, '2':{'quantity':1,'price':'12,99'}, '3':
{'quantity':4,'price':'14,99'}}
With this line,{{request.session.cart.values}}, I got:
dict_values([{'quantity':1,'price',9.99},{'quantity':1,'price',12.99},{'quantity':4,'price',14.99}])
Как я могу получить общее количество, т.е. 6? Спасибо за помощь!