如何在Odoo15中通过Python代码调用确认弹窗并获取结果
解决Odoo15中Python触发确认弹窗并获取结果的方案
首先明确核心限制:Python后端运行在服务器环境,而确认弹窗是浏览器端的交互,无法直接在Python函数内同步触发并获取结果——这是前后端架构的本质特性。但可以通过「后端触发前端弹窗,用户操作后回调后端函数」的异步方式实现需求,无需依赖Wizard或XML按钮的confirm属性。
方案1:原生浏览器确认框+RPC回调后端
步骤1:定义触发弹窗与结果处理的Python函数
from odoo import models, api class YourTargetModel(models.Model): _inherit = 'your.model.name' # 替换为实际要扩展/使用的模型 @api.model def trigger_confirm_popup(self, record_id): # 构造前端执行的JS代码,用户选择后通过RPC调用后端处理函数 js_code = f""" if (confirm('确定要执行该操作吗?')) {{ odoo.call('your.model.name.handle_confirm_result', {{ record_id: {record_id}, result: true }}); }} else {{ odoo.call('your.model.name.handle_confirm_result', {{ record_id: {record_id}, result: false }}); }} """ # 返回执行JS的客户端动作 return { 'type': 'ir.actions.client', 'tag': 'javascript', 'params': {'code': js_code} } @api.model def handle_confirm_result(self, record_id, result): # 这里编写基于用户选择的后续业务逻辑 target_record = self.browse(record_id) if result: # 用户确认后的操作示例:修改记录状态 target_record.write({'state': 'confirmed'}) else: # 用户取消后的操作示例:记录日志或直接跳过 pass
步骤2:在任意Python函数中触发弹窗
只需返回上述trigger_confirm_popup的动作结果,即可让前端弹出确认框:
@api.model def your_business_function(self): # 执行业务逻辑前半部分 # ... # 触发弹窗,传入当前操作的记录ID(按需调整) return self.trigger_confirm_popup(self.id)
方案2:Odoo风格弹窗(更美观)
如果需要和Odoo系统风格统一的弹窗,可替换为Odoo官方的Dialog组件:
步骤1:修改弹窗JS代码
将trigger_confirm_popup中的js_code替换为以下内容:
odoo.require('web.Dialog').then(function(Dialog) { new Dialog(this, { title: '操作确认', size: 'medium', $content: $('<p>确定要执行该操作吗?</p>'), buttons: [ { text: '取消', close: true, click: function() { odoo.call('your.model.name.handle_confirm_result', {{ record_id: {record_id}, result: false }}); } }, { text: '确认', close: true, classes: 'btn-primary', click: function() { odoo.call('your.model.name.handle_confirm_result', {{ record_id: {record_id}, result: true }}); } } ] }).open(); });
步骤2:结果处理逻辑
handle_confirm_result函数与方案1完全一致,负责处理用户的选择结果。
关键说明
- 该方式为异步执行:Python函数先返回触发弹窗的动作,浏览器执行弹窗后,用户操作结果通过RPC回调后端处理函数,不存在代码阻塞问题。
- 无需依赖Wizard或XML配置:完全通过Python+前端JS协作实现,可在任意Python业务函数中触发。
内容的提问来源于stack exchange,提问作者Talented Developer
相关产品推荐
相关产品推荐

