Я создаю интернет-магазин и хочу использовать сеансы, чтобы анонимные пользователи могли добавлять товары в корзины перед входом в систему. пытается сохранить добавленные элементы в сеансе как список, но при этом сохраняется только последний добавленный в список объект
def cart(request):
user_id = request.user.id
cart_items =Cart.objects.all().filter(user_id=user_id, is_ordered=False)
ids = request.session.get('cart_id')
if ids:
for cart_id in ids:
if request.user.is_authenticated:
cart = Cart.objects.get(id=cart_id)
if cart:
cart.user = request.user
cart.save()
# get total prices
prices = []
for item in cart_items:
prices.append(item.item.price * item.qty)
total_price = sum(prices)
context = {
'items': cart_items,
'total_price': total_price
}
request.session['prices'] = prices
return render(request, 'cart.html', context)
def add_to_cart (запрос):
if request.user.is_authenticated:
item = Item.objects.get(pk=request.POST['item_id'])
cart = Cart.objects.filter(
user=request.user, item=item, is_ordered=False).first()
if cart:
cart.qty += 1
cart.save()
messages.success(request, 'item added to cart!')
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
else:
cart = Cart(user=request.user, item=item)
cart.save()
messages.success(request, 'item added to cart!')
else:
carts_ids = []
session_cart = request.session.get('cart_id')
item = Item.objects.get(pk=request.POST['item_id'])
if session_cart :
for cart in session_cart:
carts = Cart.objects.all().filter(id=cart, item=item)
if carts:
cart = carts.filter(item=item)[0]
print(cart.qty)
cart.qty += 1
cart.save()
else:
print('new cart')
new_cart = Cart(item=item)
new_cart.save()
carts_ids.append(new_cart.id)
request.session['cart_id'] = carts_ids
else:
print('new session')
new_cart = Cart(item=item)
new_cart.save()
carts_ids.append(new_cart.id)
request.session['cart_id'] = carts_ids
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
вот мои models.py и полный код на github, над которым я сейчас работаю только над этими представлениями (cart и add_to_cart)
оцените любую помощь, чтобы преодолеть это и упростить мой код:)