如何在不将记录保存到数据库的情况下创建记录
How to create a record without saving it in database
我正在使用 Odoo 12 的 Inventory
插件(但我的问题可能发生在任何模块上)。
在此插件中,StockMove
模型有一个 move_line_ids
字段。
在 Detailed Operations
对话框中,我们可以看到所选着法的所有着法线的树视图。
如果我们单击 Add a line
按钮并设置字段,值将存储在内存中,但不会存储在数据库中,除非我们单击 Confirm
按钮。
我想在自定义 StockMove
模型的 @api.onchange()
方法中复制此行为,但我不知道如何继续。
如果我使用 self.move_line_ids.create()
方法创建我的新记录,即使我不单击 Confirm
按钮,移动行也会存储在数据库中。
有人成功做到了吗?
提前致谢!
抱歉,如果这是一个重复的问题,但我还没有找到问题的答案 ><
答案有效,但会破坏其他 Move
字段,例如 reserved_availability
(始终 0
)或 quantity_done
(始终 1
).
我保持 有效,因为评论显示了我正在寻找的解决方案。
非常感谢你们的帮助!
.create
方法在数据库中创建一条记录,所以它应该这样做,
如果我理解你的话,我认为你应该使用 TransientModel
或 AbstractModel
之类的东西?!
An Abstract model is created by a class based on models.AbstractModel instead of
the usual models.Model. It has all the attributes and capabilities of regular models; the
difference is that the ORM will not create an actual representation for it in the database. So,
it can have no data stored in it. It serves only as a template for a reusable feature that is to be
added to regular models.
相信直接给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 12 的 Inventory
插件(但我的问题可能发生在任何模块上)。
在此插件中,StockMove
模型有一个 move_line_ids
字段。
在 Detailed Operations
对话框中,我们可以看到所选着法的所有着法线的树视图。
如果我们单击 Add a line
按钮并设置字段,值将存储在内存中,但不会存储在数据库中,除非我们单击 Confirm
按钮。
我想在自定义 StockMove
模型的 @api.onchange()
方法中复制此行为,但我不知道如何继续。
如果我使用 self.move_line_ids.create()
方法创建我的新记录,即使我不单击 Confirm
按钮,移动行也会存储在数据库中。
有人成功做到了吗?
提前致谢!
抱歉,如果这是一个重复的问题,但我还没有找到问题的答案 ><
Move
字段,例如 reserved_availability
(始终 0
)或 quantity_done
(始终 1
).
我保持
非常感谢你们的帮助!
.create
方法在数据库中创建一条记录,所以它应该这样做,
如果我理解你的话,我认为你应该使用 TransientModel
或 AbstractModel
之类的东西?!
An Abstract model is created by a class based on models.AbstractModel instead of
the usual models.Model. It has all the attributes and capabilities of regular models; the
difference is that the ORM will not create an actual representation for it in the database. So,
it can have no data stored in it. It serves only as a template for a reusable feature that is to be
added to regular models.
相信直接给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})]