odoo - 如何在不将记录保存到数据库的情况下创建记录

标签 odoo recordset odoo-12

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

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

相关文章:

python - 如何为不同字段添加 "decoration-danger"?例如,如果我的字段不属于 50-100,我想将其更改为红色。对于其他可能是 85-95

javascript - Odoo 表单中的表单小部件按钮

odoo - 开放式ERP。在 TreeView 中动态地将图像添加到字段中

python - python中使用self.browse进行openerp开发的目的是什么?

sql - 来自单个更新 SQL 语句的多行更新 SQL 触发器

vb.net - 连接字符串不正确

c++ - 如何将 _variant_t 数据类型转换为 wstring

python - 如何阻止 Odoo 多次调用函数?

javascript - stock.quant TreeView 上的 Odoo 12 创建按钮

python - 将列表返回到 Many2One 字段