Flask 在 Session 中更新产品数量

Flask update product quantity in Session

我正在尝试使用 Flask 创建一个小型电子商务商店。除了购物车阶段,一切都进展顺利。我希望应用程序增加购物车中的产品数量,而不是两次添加相同的产品。

比如我点击“加入购物车”两次,session中保存的数据是这样的:

[{'product': '5', 'quantity': 1}]
[{'product': '5', 'quantity': 1}]

我希望将其保存为:

[{'product': '5', 'quantity': 2}]

这是我当前的代码:

@app.route('/item/<id>', methods=['POST', 'GET'])
def item_page(id):
    form = add_to_cart()
    if form.validate_on_submit():
        if 'cart' in session:
            session['cart'].append({'id' : form.id.data, 'quantity' : form.quantity.data})
            session.modified = True
    return render_template('product.html', form=form)

我发现这里回答了一个类似的问题,但解决方案对我不起作用: Flask python where should I put goods that go to cart in online shop?

您正在追加到列表中,因此您总是在创建新行。

您需要检查该产品是否已存在于购物车的商品列表中,如果存在,则增加数量。类似(这是非常粗糙的代码)

    # Get a temporary reference to the session cart, just to reduce the name of the variable we will use subsequently
    cart = session["cart"]

    # This flag will be used to track if the item exists or not
    itemExists = False

    # Iterate over the cart contents and check if the id already exists
    for index, value in enumerate(cart):
        if value["id"] == form.id.data:
            cart[index]["quantity"] = cart[index]["quantity"] + form.quantity.data
            itemExists = True
            break # exit the for loop 

    # if the item does not exist, then you create a new row
    if not itemExists:
        cart.append({'id' : form.id.data, 'quantity' : form.quantity.data})
    
    # Save the temp cart back into session
    session["cart"] = cart