Odoo13如何将采购订单行自定义weight字段值复制到stock move对应字段
Odoo 13 采购订单行自定义weight字段同步到库存移动实现方案
你现有逻辑可以优先优化,原生stock.move模型自带sale_line_id(关联销售订单行)、purchase_line_id(关联采购订单行)字段,不需要通过拣货单的procurement group反向搜索订单,逻辑更简洁、性能更高,完整实现代码如下:
class StockMove(models.Model): _inherit = 'stock.move' weight = fields.Float(compute='_compute_weight') def _compute_weight(self): for move in self: # 匹配销售订单行 if move.sale_line_id: move.weight = move.sale_line_id.weight continue # 匹配采购订单行 if move.purchase_line_id: move.weight = move.purchase_line_id.weight continue # 无匹配时赋默认值 move.weight = 0
如果你需要保留原有基于procurement group搜索的逻辑,else分支补充代码如下:
else: # 搜索关联的采购订单 purchase_order = self.env['purchase.order'].sudo().search([ ('group_id', '=', picking.group_id.id)], limit=1) if purchase_order: move_weight = 0 for line in purchase_order.order_line: if line.product_id.id == move.product_id.id: move_weight = line.weight break move.weight = move_weight else: # 无关联采购订单时赋默认值 move.weight = 0
注意事项
- 确保你已经在
purchase.order.line模型上正确定义了自定义weight字段,字段类型、参数和销售订单行、库存移动的weight字段保持一致 - 优先选择基于原生关联字段的实现方案,避免同订单多同产品行时的匹配错误问题
- 如果你需要字段支持编辑、存储到数据库,可以给weight字段添加
store=True参数,同时设置readonly=False即可
内容的提问来源于stack exchange,提问作者Desirée Rodriguez Sanchez
相关产品推荐
相关产品推荐

