我正在使用 Odoo 12 的 Inventory
插件(但我的问题可能发生在任何模块上)。
在此插件中,StockMove
模型有一个 move_line_ids
字段。
在 Detailed Operations
对话框中,我们可以看到所选移动的所有移动线的 TreeView 。
如果我们点击 Add a line
按钮并设置字段,值将存储在内存中,但不会存储在数据库中,除非我们点击 Confirm
按钮。
我想在我的自定义 StockMove
模型的 @api.onchange()
方法中复制此行为,但我找不到如何继续。< br/> 如果我使用 self.move_line_ids.create()
方法创建我的新记录,即使我没有点击 Confirm
,移动行也会存储在数据库中按钮。
有人成功做到了吗?
提前致谢!
抱歉,如果这是一个重复的问题,但我还没有找到问题的答案 ><
jzeta answer 有效,但会破坏其他 Move
字段,例如 reserved_availability
(始终为 0
)或 quantity_done
(始终为 1
)。
我保留 jzeta正如评论显示我正在寻找的解决方案一样经过验证。
非常感谢你们的帮助!
请您参考如下方法:
我相信你可以通过直接给move_line_ids
赋值来实现。当然,如果字段是 One2many
,您需要使用特殊的三元组列表来实现。在你的情况下,你需要一个 [(0, _, values)]
来创建一个新记录(其中 values
是保存每个新记录字段的字典值)。在下面的示例中,我只创建了一个附加到给定 stock.move
实例的记录,并且我只传递了字典中的 move_id
值。您应该使用新移动行的适当值来完成代码,但请注意,您应该始终告诉新记录它链接到哪个股票移动。
@api.onchange('your_field_name')
def _onchange_field(self):
self.move_line_ids = [(0, False, {'move_id': self.id})]