问题描述
我正在创建一个电子商务商店,我使用 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