我正在使用 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})] 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!