【问题标题】:Django sessions doesn't allow me to add items in my cartDjango 会话不允许我在购物车中添加商品
【发布时间】:2021-04-04 23:04:53
【问题描述】:

我正在创建一个电子商务商店,我使用 Django 会话来存储购物车信息。但是,由于某种原因,只有 2 件商品被存储在购物车中,并且没有更多。一旦我添加了第一个项目,它就会保持原样。然后我添加第二项。但是,当我添加第 3 项时,第 2 项会被第 3 项覆盖,购物车中仍然只保留 2 件产品。

我觉得这将是一个简单的逻辑错误,但我似乎无法弄清楚。

我的意见.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 个项目。

我做的代码有错误吗?

任何帮助将不胜感激。 谢谢!

【问题讨论】:

    标签: python django django-views django-sessions


    【解决方案1】:

    由于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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 2020-01-14
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      相关资源
      最近更新 更多