如何在Odoo 15中点击加入购物车时清空已有购物车
解决方案
要实现购物车仅保留一件商品的需求,只需在调用_cart_update添加新商品前,清空当前购物车的所有现有商品即可。具体修改如下:
修改后的完整代码
@http.route(['shop/cart/update'], type='http', auth="public", methods=['POST'], website=True) def cart_update(self, product_id, add_qty=1, set_qty=0, **kw): """This route is called when adding a product to cart (no options).""" sale_order = request.website.sale_get_order(force_create=True) if sale_order.state != 'draft': request.session['sale_order_id'] = None sale_order = request.website.sale_get_order(force_create=True) # 新增:清空现有购物车所有商品 if sale_order.order_line: sale_order.order_line.unlink() product_custom_attribute_values = None if kw.get('product_custom_attribute_values'): product_custom_attribute_values = json_scriptsafe.loads(kw.get('product_custom_attribute_values')) no_variant_attribute_values = None if kw.get('no_variant_attribute_values'): no_variant_attribute_values = json_scriptsafe.loads(kw.get('no_variant_attribute_values')) sale_order._cart_update( product_id=int(product_id), add_qty=add_qty, set_qty=set_qty, product_custom_attribute_values=product_custom_attribute_values, no_variant_attribute_values=no_variant_attribute_values ) if kw.get('express'): return request.redirect("/checkout?express=1") return request.redirect("/cart")
逻辑说明
- 在获取到有效的草稿状态订单后,先检查订单是否已有商品行(
sale_order.order_line) - 如果存在商品行,直接调用
unlink()删除所有现有商品,确保购物车为空 - 再执行原有的
_cart_update逻辑添加新商品,保证购物车始终只有当前添加的这一件商品
内容的提问来源于stack exchange,提问作者imbra
相关产品推荐
相关产品推荐

