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

Odoo 16如何在客户新会话/登录时清空购物车?

Odoo 16 购物车重置相关问题解答

1. 如何在客户每次新登录时重置购物车内容?

要实现客户每次登录时清空购物车,核心是在用户登录完成的时机触发清除操作,有两种常用实现方式:

  • 重写登录控制器:继承auth_signup模块的登录控制器,在登录成功后添加购物车清除逻辑。
  • 利用模型钩子:在res.users模型中通过on_login钩子,执行购物车清除操作。

示例代码(重写登录控制器):

from odoo import http
from odoo.addons.auth_signup.controllers.main import AuthSignupHome

class CustomAuthSignupHome(AuthSignupHome):
    @http.route()
    def web_login(self, *args, **kw):
        response = super().web_login(*args, **kw)
        # 登录成功后清空购物车
        if response.qcontext.get('login_success'):
            order = request.website.sale_get_order()
            if order:
                order.order_line.unlink()
        return response

2. 是否可在设置中将revive参数设为FALSE来实现该需求?

不能。从提供的代码片段可以明确:

  • revive是/shop/cart路由的请求级参数,仅用于控制「废弃购物车(通过access_token访问的)」与当前购物车的合并方式(可选值为merge或squash),并非全局配置项,无法通过后台设置修改。
  • 即使将revive设为FALSE,Odoo仍会加载当前用户关联的未完成购物车,该参数不影响用户自身历史购物车的默认加载逻辑。

3. 是否需要在客户每次登录时调用现有的clear_cart函数?

是,这是可行的方案之一。你可以在用户登录成功的时机调用clear_cart相关逻辑:

  • 前端触发:登录成功后调用/shop/cart/clear的JSON接口。
  • 后端复用:直接在登录逻辑中复用clear_cart的代码(获取当前订单并删除所有订单项),避免额外HTTP请求。

注意:clear_cart本身仅清除当前会话的购物车内容,在登录时调用能确保用户新登录后的购物车为空。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:22:40