【发布时间】:2020-02-11 03:15:56
【问题描述】:
我正在建立在线商店并希望使用会话来允许匿名用户在登录之前将商品添加到购物车。 尝试将会话中添加的项目保存为列表,但它只保存添加到列表中的最后一个对象
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 上的完整代码,我现在只处理这些视图(购物车和 add_to_cart)
申请任何帮助来克服这个问题并简化我的代码:)
【问题讨论】: