You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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")

逻辑说明

  1. 在获取到有效的草稿状态订单后,先检查订单是否已有商品行(sale_order.order_line)
  2. 如果存在商品行,直接调用unlink()删除所有现有商品,确保购物车为空
  3. 再执行原有的_cart_update逻辑添加新商品,保证购物车始终只有当前添加的这一件商品

内容的提问来源于stack exchange,提问作者imbra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:55:16