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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 02:27:01