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

Odoo 15 通过Python代码创建mrp.production时onchange未触发组件未加载

问题原因

你调用mrp.production的create方法时缺少两个关键步骤:

  1. 没有手动匹配当前产品对应的有效BOM并传入bom_id字段
  2. Odoo原生的create方法不会自动触发BOM组件生成逻辑,该逻辑默认绑定在产品/BOM的onchange事件中,你创建完成后需要主动调用对应方法触发组件生成。

修复后的代码示例

import datetime
from odoo import models, fields, api

class StockMoveInherit(models.Model):
    _inherit = 'stock.move'

    def button_manufacture(self):
        mrp_production_obj = self.env['mrp.production']
        # 查找当前产品的有效BOM,可根据业务需要调整筛选条件
        bom = self.env['mrp.bom']._bom_find(
            product=self.product_id,
            company_id=self.company_id.id,
            bom_type='normal'
        )
        if not bom:
            # 可在此处添加找不到BOM时的异常提示或业务逻辑
            return
        values = {
            'product_id': self.product_id.id,
            'product_qty': self.product_uom_qty,
            'bom_id': bom.id, # 传入匹配到的BOM ID
            'company_id': self.company_id.id,
            'consumption': 'flexible',
            'date_planned_start': datetime.datetime.now(),
            'location_dest_id': self.location_dest_id.id,
            'location_src_id': self.location_dest_id.id,
            'product_uom_id': self.product_id.uom_id.id,
        }
        res = mrp_production_obj.create(values)
        # 调用BOM变更方法触发组件自动生成
        res._onchange_bom_id()
        # 可选:如果需要同步更新产品相关的其他默认配置,额外调用产品变更方法
        res._onchange_product_id()

补充说明

  • _bom_find是Odoo官方提供的BOM匹配工具,会自动返回对应产品优先级最高的有效BOM,你也可以根据业务需求自定义筛选逻辑获取指定BOM
  • _onchange_bom_id执行后会自动根据BOM内容生成对应的原料组件清单、成品入库记录,不需要手动组装组件数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:03