微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 会话不允许我在购物车中添加商品

如何解决Django 会话不允许我在购物车中添加商品

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。