我正在使用Odoo 12的Inventory插件(但是任何模块都可能发生我的问题)。

在此插件中,StockMove模型具有move_line_ids字段。
Detailed Operations对话框中,我们可以看到所选移动的所有移动线的树状 View 。

如果单击Add a line按钮并设置字段,则除非单击Confirm按钮,否则值将存储在内存中,而不存储在数据库中。

我想在我的自定义@api.onchange()模型的StockMove方法中复制此行为,但是我找不到如何进行操作。
如果我使用self.move_line_ids.create()方法创建新记录,则即使不单击Confirm按钮,移动行也将存储在数据库中。

是否有人设法做到这一点?

先感谢您!
很抱歉,如果它是重复的问题,但是我还没有找到问题的答案> <

jzeta答案有效,但中断了其他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})]

关于odoo - 如何创建记录而不将其保存在数据库中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56092261/

10-11 01:41