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

如何通过Python创建带指定序列号的stock.move.line并关联至move_line_nosuggest_ids

解决Odoo中写入move_line_nosuggest_ids无效的问题

核心结论:move_line_nosuggest_ids是计算字段,不能直接写入,直接给该字段传值会被Odoo自动忽略,记录会被默认写入实际存储的move_line_ids字段,这就是你遇到的问题根源。

正确操作方式是直接创建/更新stock.move.line记录,同时设置nosuggest=True属性,这条记录会自动被归类到对应stock.move的move_line_nosuggest_ids集合中。

针对你的退货入库场景,具体操作如下:

  • 创建带指定序列号的新move line:

    # 假设已获取目标stock.move对象:move
    env['stock.move.line'].create({
        'move_id': move.id,
        'product_id': move.product_id.id,
        'product_uom_id': move.product_uom.id,
        'qty_done': move.product_uom_qty,  # 根据实际退货数量调整
        'location_id': move.location_id.id,
        'location_dest_id': move.location_dest_id.id,
        'lot_id': your_specified_lot_id,  # 传入指定序列号对应的lot ID
        'nosuggest': True,  # 关键属性,标记为非建议行
    })
    
  • 更新已有move line:
    找到目标move line后,直接更新序列号和nosuggest属性:

    # 假设已定位到待更新的existing_move_line对象
    existing_move_line.write({
        'lot_id': your_specified_lot_id,
        'nosuggest': True,
    })
    

额外注意:由于你的退货单已处于预留状态,建议先解除预留再操作,避免系统自动生成干扰行。可调用move的内置方法解除预留:

move._do_unreserve()

操作完成后,再查看对应stock.move的move_line_nosuggest_ids,就能看到带指定序列号的目标记录了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:31:07