Odoo 如何创建记录而不将其保存在数据库中

Odoo 如何创建记录而不将其保存在数据库中,odoo,recordset,odoo-12,Odoo,Recordset,Odoo 12,我正在使用odoo12的库存插件(但我的问题可能发生在任何模块上) 在这个插件中,StockMove模型有一个move\u line\u id字段。 在详细操作对话框中,我们可以看到所选移动的所有移动行的树状视图 如果我们单击添加行按钮并设置字段,则值将存储在内存中,但不会存储在数据库中,除非我们单击确认按钮 我想在我的自定义StockMove模型的@api.onchange()方法中复制此行为,但我找不到如何继续。 如果我使用self.move\u line\u id.create()方法创建

我正在使用odoo12的
库存
插件(但我的问题可能发生在任何模块上)

在这个插件中,
StockMove
模型有一个
move\u line\u id
字段。
详细操作
对话框中,我们可以看到所选移动的所有移动行的树状视图

如果我们单击
添加行
按钮并设置字段,则值将存储在内存中,但不会存储在数据库中,除非我们单击
确认
按钮

我想在我的自定义
StockMove
模型的
@api.onchange()
方法中复制此行为,但我找不到如何继续。
如果我使用
self.move\u line\u id.create()
方法创建新记录,即使我没有单击
Confirm
按钮,移动行也将存储在数据库中

有人做到了吗

提前谢谢你

如果这是一个重复的问题,很抱歉,但是我还没有找到我问题的答案>
。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\u line\u id
来实现。当然,如果字段是
One2many
,则需要使用特殊的三元组列表来实现这一点。在您的情况下,您需要一个
[(0,u,values)]
,因为您想要创建一个新记录(其中
values
是保存每个新记录的字段值的字典)。在下面的示例中,我只创建一条附加到给定
stock.move
实例的记录,并且我只传递字典中的
move\u id
值。您应该使用新移动行的适当值来完成代码,但请注意,您应该始终告诉新记录它链接到了哪个股票移动

@api.onchange('your_field_name')
def _onchange_field(self):
    self.move_line_ids = [(0, False, {'move_id': self.id})]

不是真的,我想将其添加到数据库中,但是当单击
确认
按钮时,对于每个具有正常模型的树视图。我只想复制
@api.onchange()
方法中添加一行
行为。我的意思是,当一个事件触发这个onchange时,我想在我的树视图中添加一个新行,而不是OP所要求的。通常,
AbstractModel
用于混合,而
TransientModel
用于向导。OP询问如何使用and onchange方法更新O2m字段,而不调用
create
。如果我
print(键入(self.move\u line\u id))
,我会得到
。做作业可以吗?如果我想添加到,而不是设置move\u line\u id值,该怎么办?(很抱歉,我在使用ORM时遇到了困难…)好的,我已经测试过了,它可以工作了。虽然我们做了一个作业,但我还是不明白为什么类型没有改变,但是。。。好啊非常感谢你!实际上,它是有效的,但会破坏移动量和保留量。向导开始显示0/3个单位(例如),在我添加一个单位后,1/0个单位,然后我再次添加,仍然是1/0个单位。我记得,您可以使用
new
方法,它的工作原理与
create
类似,只是它不会将记录保存在数据库中。我认为您通常使用
new()
当您想调用一些
onchange
方法来获取在GUI上执行此操作时所缺少的值时。您可以这样做:
cache\u record=self.env['')。新建(值)
;然后调用您想要调用的
onchange
方法;最后从缓存对象中获取值字典:
updated\u values=cache\u record.\u convert\u to\u write(cache\u record.\u cache)
;最后使用
write
create
方法上的更新值。这也可能对OP的问题起到作用。但我还没有试过。