Odoo 15 通过Python代码创建mrp.production时onchange未触发组件未加载
问题原因
你调用mrp.production的create方法时缺少两个关键步骤:
- 没有手动匹配当前产品对应的有效BOM并传入
bom_id字段 - 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
相关产品推荐
相关产品推荐

