如何阻止 Odoo 自定义按钮自动保存?
How can I stop Odoo custom button from auto save?
我在我的视图中创建了一个按钮,它触发了模块中的一个方法。但是,在单击按钮时,临时编辑的字段将被保存,并且在单击 'Discard' 按钮时不会恢复。
这是我的视图代码:
<form>
<sheet>
<group>
<field name="name" />
</group>
<button name="my_button" string="My Button" type="object" class="oe_edit_only" />
</sheet>
</form>
单击 my_button
后,字段 name
将保存在数据库中,按钮 Discard
将不再起作用。
如何防止 Odoo 在单击我的自定义按钮时保存临时数据?
(我正在使用 Odoo10,但我想它与旧版本的 Odoo 一样)
默认情况下,在 odoo 中,一旦您触发任何事件(例如按钮单击),任何服务器端代码都会呈现,然后无论如何都会首先保存记录,您将在 Self(调用对象)。
所以一旦你点击那个按钮,就意味着记录已经保存在数据库中,之后 Discard 将没有任何效果。
您可以在 Sales Quotation / Order
中看到的最佳示例有一个 link“Update”,它将 return True 来自方法它不执行任何操作,但一旦调用该方法,整个记录将被保存和总计(所有功能字段将被计算)并且你觉得 update link 执行计算(link 在仅限编辑模式)。
通常在新的 api 方法中,通过单击按钮调用的方法应该有装饰器 @api.one
或 @api.multi
。
##Single record will be there in self.
@api.one
def button_click(self):
return False
##list of records (recordset) will be there in self.
@api.multi
def button_click(self):
return False
所以当你点击那个按钮时,会先保存记录,然后调用方法。
您可以将按钮更改为布尔字段,并使 my_button
方法成为 onchange
。
Python
my_button = fields.Boolean('Label')
@api.multi
@api.onchange('my_button')
def onchange_my_button(self):
for record in self:
# whatever my_button does
如果您希望它仍然显示为按钮,您可以显示样式为按钮的标签并隐藏实际的复选框。
XML
<label for="my_button" class="btn btn-sm btn-primary"/>
<field name="my_button" invisible="1"/>
我在我的视图中创建了一个按钮,它触发了模块中的一个方法。但是,在单击按钮时,临时编辑的字段将被保存,并且在单击 'Discard' 按钮时不会恢复。
这是我的视图代码:
<form>
<sheet>
<group>
<field name="name" />
</group>
<button name="my_button" string="My Button" type="object" class="oe_edit_only" />
</sheet>
</form>
单击 my_button
后,字段 name
将保存在数据库中,按钮 Discard
将不再起作用。
如何防止 Odoo 在单击我的自定义按钮时保存临时数据?
(我正在使用 Odoo10,但我想它与旧版本的 Odoo 一样)
默认情况下,在 odoo 中,一旦您触发任何事件(例如按钮单击),任何服务器端代码都会呈现,然后无论如何都会首先保存记录,您将在 Self(调用对象)。
所以一旦你点击那个按钮,就意味着记录已经保存在数据库中,之后 Discard 将没有任何效果。
您可以在 Sales Quotation / Order
中看到的最佳示例有一个 link“Update”,它将 return True 来自方法它不执行任何操作,但一旦调用该方法,整个记录将被保存和总计(所有功能字段将被计算)并且你觉得 update link 执行计算(link 在仅限编辑模式)。
通常在新的 api 方法中,通过单击按钮调用的方法应该有装饰器 @api.one
或 @api.multi
。
##Single record will be there in self.
@api.one
def button_click(self):
return False
##list of records (recordset) will be there in self.
@api.multi
def button_click(self):
return False
所以当你点击那个按钮时,会先保存记录,然后调用方法。
您可以将按钮更改为布尔字段,并使 my_button
方法成为 onchange
。
Python
my_button = fields.Boolean('Label')
@api.multi
@api.onchange('my_button')
def onchange_my_button(self):
for record in self:
# whatever my_button does
如果您希望它仍然显示为按钮,您可以显示样式为按钮的标签并隐藏实际的复选框。
XML
<label for="my_button" class="btn btn-sm btn-primary"/>
<field name="my_button" invisible="1"/>