Django 会话不允许我在购物车中添加商品
Django sessions doesn't allow me to add items in my cart
我正在创建一个电子商务商店,我使用 Django 会话来存储购物车信息。但是,出于某种原因,购物车中只存储了 2 件商品,没有更多。一旦我添加了第一个项目,它就会保持原样。然后我添加第二项。但是,当我添加第 3 件商品时,第 2 件商品被第 3 件商品覆盖,购物车中仍然只保留 2 件商品。
我觉得这是一个简单的逻辑错误,但我似乎无法理解。
我的views.py...
def shop(request):
if not request.session.get('order1'):
request.session['order1'] = []
if request.method == "POST":
quantity = int(request.POST.get('quantity'))
name = request.POST.get('name')
if quantity >= 1:
request.session.get('order1').append({"quantity":quantity, "name":name})
context = {
"check":request.session.get('order1'),
}
else:
messages.warning(request, "You have entered an invalid quantity")
context={}
else:
context={}
return render(request, "store/shop.html", context)
context = {"check":request.session.get('order1')}
的输出是这样的 [{'quantity': 1, 'name': 'Tissot Watch for men - black star striped'}, {'quantity': 2, 'name': 'Jewelry Bangles Stripes for Girls'}]
并且始终只有 2 个项目。
我做的代码有没有错误?
如有任何帮助,我们将不胜感激。
谢谢!
由于 request.session['order1']
是一个列表,因此会话中间件不会将其任何更改检测为“更改”,因为它仍然是同一个对象。
一个解决方案是在会话
上设置modified
属性
# In your view after appending to a list in the session
request.session.modified = True
另一种解决方案是将您的设置更新为 save the session on every request,无论中间件是否认为它已被更改
# In settings.py
SESSION_SAVE_EVERY_REQUEST = True
我正在创建一个电子商务商店,我使用 Django 会话来存储购物车信息。但是,出于某种原因,购物车中只存储了 2 件商品,没有更多。一旦我添加了第一个项目,它就会保持原样。然后我添加第二项。但是,当我添加第 3 件商品时,第 2 件商品被第 3 件商品覆盖,购物车中仍然只保留 2 件商品。
我觉得这是一个简单的逻辑错误,但我似乎无法理解。
我的views.py...
def shop(request):
if not request.session.get('order1'):
request.session['order1'] = []
if request.method == "POST":
quantity = int(request.POST.get('quantity'))
name = request.POST.get('name')
if quantity >= 1:
request.session.get('order1').append({"quantity":quantity, "name":name})
context = {
"check":request.session.get('order1'),
}
else:
messages.warning(request, "You have entered an invalid quantity")
context={}
else:
context={}
return render(request, "store/shop.html", context)
context = {"check":request.session.get('order1')}
的输出是这样的 [{'quantity': 1, 'name': 'Tissot Watch for men - black star striped'}, {'quantity': 2, 'name': 'Jewelry Bangles Stripes for Girls'}]
并且始终只有 2 个项目。
我做的代码有没有错误?
如有任何帮助,我们将不胜感激。 谢谢!
由于 request.session['order1']
是一个列表,因此会话中间件不会将其任何更改检测为“更改”,因为它仍然是同一个对象。
一个解决方案是在会话
上设置modified
属性
# In your view after appending to a list in the session
request.session.modified = True
另一种解决方案是将您的设置更新为 save the session on every request,无论中间件是否认为它已被更改
# In settings.py
SESSION_SAVE_EVERY_REQUEST = True