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
相关产品推荐
相关产品推荐

