如何通过Python代码调用并正确显示Odoo Wizard弹窗
Odoo Wizard弹出失败排查与修复
核心问题定位
- 未实际创建wizard记录:原代码仅获取了
pos.assign.manual.quants模型的引用,没有调用create()方法生成wizard实例,传递的res_id为无效空值,导致弹窗无法加载对应数据。 - 可选兼容问题:
view_type参数在Odoo 13及以上版本已废弃,保留可能引发版本兼容报错。 - 潜在异常风险:未校验视图是否存在,若
env.ref未找到对应视图ID会直接抛出异常。
修复后代码
if self.move_id: # 校验视图是否存在,避免引用失效报错 try: view = self.env.ref('modified_pos.pos_assign_manual_quants_form_view') except ValueError: # 视图不存在时留空让Odoo自动匹配该模型的form视图 view = False # 实际创建wizard记录,可根据业务需要在create中传入默认字段值 wiz = self.env['pos.assign.manual.quants'].create({}) return { 'name': _('修改数量'), 'type': 'ir.actions.act_window', 'view_mode': 'form', 'res_model': 'pos.assign.manual.quants', 'views': [(view.id if view else False, 'form')], 'view_id': view.id if view else False, 'target': 'new', 'res_id': wiz.id, 'context': self.env.context, }
额外排查项
如果修改后仍无法弹出,可依次检查以下配置:
- 确认
pos.assign.manual.quants模型已正确定义,且当前用户拥有该模型的访问权限(ACL配置正常) - 确认
modified_pos.pos_assign_manual_quants_form_view视图已在模块的__manifest__.py中正确注册,模块已完成升级 - 确认触发该方法的动作没有被其他JS/后端逻辑拦截,返回的action结构没有被覆盖
内容的提问来源于stack exchange,提问作者mr-intrepid
相关产品推荐
相关产品推荐

