如何通过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
相关产品推荐
相关产品推荐

