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

Odoo中如何基于其他表单的boolean字段值更新指定表单的boolean字段

Odoo跨模型字段联动实现方案

前提:假设你已经通过自定义模块给mrp.production模型新增了字段mrp_boolean,给stock.picking模型新增了字段stock_boolean。Odoo标准逻辑中stock picking的origin字段默认会关联对应MRP生产单的编号,你也可以自定义mrp_production_id多对一字段直接绑定对应生产单,关联查询性能会更高。


实现方式1:重写write方法(全场景适用,最稳定)

该方案不管是前端界面修改、后端代码调用修改、API接口修改字段都会触发联动逻辑,无遗漏。

from odoo import models, fields, api

class StockPicking(models.Model):
    _inherit = 'stock.picking'

    stock_boolean = fields.Boolean(string='库存触发标识')
    # 可选:自定义直接关联字段,性能更优
    # mrp_production_id = fields.Many2one('mrp.production', string='关联生产单')

    def write(self, vals):
        res = super(StockPicking, self).write(vals)
        # 检测stock_boolean是否被设置为True
        if 'stock_boolean' in vals and vals['stock_boolean']:
            for picking in self:
                # 方式A:通过origin字段查找关联MRP生产单
                if picking.origin:
                    mrp_order = self.env['mrp.production'].search([('name', '=', picking.origin)], limit=1)
                    if mrp_order:
                        mrp_order.write({'mrp_boolean': True})
                # 方式B:如果使用自定义关联字段,替换为以下逻辑
                # if picking.mrp_production_id:
                #     picking.mrp_production_id.write({'mrp_boolean': True})
        return res

实现方式2:onchange装饰器(仅前端界面修改场景适用)

如果只需要用户在前端手动勾选stock_boolean时触发联动,可以用更轻量的onchange实现:

from odoo import models, fields, api

class StockPicking(models.Model):
    _inherit = 'stock.picking'

    stock_boolean = fields.Boolean(string='库存触发标识')

    @api.onchange('stock_boolean')
    def _onchange_stock_boolean(self):
        if self.stock_boolean and self.origin:
            mrp_order = self.env['mrp.production'].search([('name', '=', self.origin)], limit=1)
            if mrp_order:
                mrp_order.write({'mrp_boolean': True})

注意:该方案仅触发前端操作的字段变更,后端代码、API修改字段不会触发联动,适合要求不高的轻量场景。


注意事项

  • 如果一个stock picking可能对应多个MRP生产单,去掉search方法的limit=1参数,即可批量更新所有匹配到的生产单
  • 如果遇到权限不足的报错,可以加sudo()提升权限执行写入操作,示例:mrp_order.sudo().write({'mrp_boolean': True})
  • 代码编写完成后升级对应自定义模块即可生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:45:03