背景信息:在我的模板中,我点击“添加产品”,它会转到另一个模板,其中我有一个所有产品的列表,我选择一个,它会将我带回到我选择的产品列表模板,并且我保留添加等等。
在我的接收器视图中,我有这个:
def vw_Sell(request):
if request.POST:
POST_received = request.POST
if 'ses_productList' in request.session:
request.session['ses_productList'].append({
'product': POST_received['idProduct'],
'quant': POST_received['quantity'],
})
else:
request.session['ses_productList'] = []
producList = request.session['ses_productList']
else:
if 'ses_productList' in request.session:
producList = request.session['ses_productList']
else:
producList = {}
context = {
"selected_products": producList
}
return render(request, "shop.html", context)
它只将第一个产品保存到会话字典中。我研究并找到SESSION_SAVE_EVERY_REQUEST
并将其设置为True,然后它可以工作,但我担心我是否正确的方式,谢谢!
答案 0 :(得分:2)
如果会话的modified
属性为True
,则会自动保存。每次调用会话对象的__setitem__()
方法(通常通过=
运算符)时,都会设置该属性。
但是,您要附加到已存在的列表,因此会话对象永远不会知道有任何更改。要保存会话,您需要手动设置其modified
属性
request.session.modified = True
将会话标记为“脏”并让会话的中间件保存它。
答案 1 :(得分:0)
感谢@ C14L的最终代码:
if 'ses_productList' in request.session:
request.session['ses_productList'].append({
'product': POST_received['idProduct'],
'quant': POST_received['quantity'],
})
request.session.modified = True