You need to enable JavaScript to run this app. Odoo开发:如何通过wizard按钮修改模型表单的statusbar状态
优惠活动
大模型
产品
解决方案
定价
更多

Odoo开发:如何通过wizard按钮修改模型表单的statusbar状态

Odoo Wizard提交绑定同步主单状态栏状态实现方案

核心实现逻辑

整个流程不需要额外编写前端JS逻辑,仅通过后端代码即可完成「点击提交→更新主单状态→自动关闭弹窗→刷新主单显示」的全链路操作。

具体开发步骤

1. 前置模型关联配置

首先在wizard模型中新增关联主业务单据的外键字段,用于定位需要更新状态的主表记录:

from odoo import models, fields

class SubmitWizard(models.TransientModel):
    _name = 'your.module.submit.wizard'
    _description = '提交确认向导'

    main_record_id = fields.Many2one(
        comodel_name='your.main.business.model',
        string="关联主单据",
        required=True
    )

2. 编写提交按钮绑定的后端方法

在wizard模型中新增action_submit方法,直接绑定到wizard表单上的提交按钮即可:

def action_submit(self):
        # 定位需要更新状态的主单记录
        target_record = self.main_record_id
        # 优先复用主单原有状态切换的封装方法,避免业务逻辑重复、遗漏校验
        target_record.action_existing_submit()
        # 触发弹窗自动关闭,底层会自动刷新背后的主表单数据
        return {'type': 'ir.actions.act_window_close'}

3. 配置主单端打开wizard的入口方法

在主业务模型中新增打开wizard的动作,确保打开wizard时自动填充关联主单的id,避免wizard找不到关联记录:

def action_open_submit_wizard(self):
        return {
            'type': 'ir.actions.act_window',
            'name': '提交确认向导',
            'res_model': 'your.module.submit.wizard',
            'view_mode': 'form',
            'target': 'new',
            'context': {
                'default_main_record_id': self.id
            }
        }

实操注意事项

  • 禁止绕开原有状态切换方法直接对state字段做裸write操作,必须复用主单上已封装的状态切换逻辑,保证权限校验、字段规则、联动行为和原状态栏按钮完全一致。
  • 提交动作返回ir.actions.act_window_close时,需确保wizard以target: new的弹窗模式打开,该模式下Odoo会自动在弹窗关闭后触发父级主表单的数据重载,无需额外编写手动刷新的JS代码。
  • 状态字段赋值需和主表单statusbar组件关联的selection选项技术值完全匹配,避免出现字段值写入但状态栏显示异常的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 19:06:05