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

如何解决Odoo12中向导的one2many字段自动弹出问题?

Odoo向导打印时one2many字段随机弹窗问题:已知Bug与修复方案

这是Odoo(13+版本居多)的已知前端交互Bug,核心原因是打印请求的异步处理和one2many字段的DOM事件存在竞态条件——两者的事件触发时机偶尔重叠,导致误触发子表单弹窗,概率性出现且无固定规律。

修复方案

1. 给打印按钮添加事件阻止属性

在向导的视图XML文件中,修改打印按钮的定义,添加prevent_default="1"来阻止默认事件冒泡,避免和one2many字段的点击/聚焦事件冲突:

<button name="action_print_payslip" string="打印" type="object" class="btn-primary" prevent_default="1"/>

2. 修改打印动作的响应逻辑,关闭向导

在向导的Python模型里,更新打印动作的返回值,加入close_on_report_download: True,让PDF下载完成后直接关闭向导,从根源切断后续的视图交互:

def action_print_payslip(self):
    # 保留你原有的PDF生成逻辑
    # 示例:pdf = self.env.ref('your_module.report_payslip').render_qweb_pdf(self.ids)[0]
    return {
        'type': 'ir.actions.report',
        'report_type': 'pdf',
        'report_name': 'your_module.report_payslip',
        'data': {'model': self._name, 'ids': self.ids},
        'close_on_report_download': True,  # 关键配置:下载后关闭向导
    }

3. 临时规避:打印前将one2many设为只读

如果前两个方案暂时无法生效,可以在打印触发时临时把one2many字段设为只读,打印完成后恢复:

def action_print_payslip(self):
    # 临时设置one2many字段为只读
    for rec in self:
        rec.write({
            'payslips': [(1, slip.id, {'readonly': True}) for slip in rec.payslips],
            'employees': [(1, emp.id, {'readonly': True}) for emp in rec.employees],
        })
    # 执行PDF生成
    pdf_result = self.env.ref('your_module.report_payslip').render_qweb_pdf(self.ids)
    # 恢复字段可编辑状态
    for rec in self:
        rec.write({
            'payslips': [(1, slip.id, {'readonly': False}) for slip in rec.payslips],
            'employees': [(1, emp.id, {'readonly': False}) for emp in rec.employees],
        })
    return {
        'type': 'ir.actions.report',
        'report_type': 'pdf',
        'report_name': 'your_module.report_payslip',
        'data': {'model': self._name, 'ids': self.ids},
    }

补充说明

这个Bug在Odoo官方社区和企业版都有反馈,主要出现在异步打印场景下。优先推荐方案1+方案2组合使用,既能阻止事件误触发,又能通过关闭向导彻底避免后续交互冲突,效果最稳定。

内容的提问来源于stack exchange,提问作者Hrvoje J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:28:28