我在视图中创建了一个触发模块内部方法的按钮。但是,点击该按钮时,会保存临时编辑的字段,而不会在点击“放弃”时将其还原。按钮。
以下是我的观点代码:
<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来说是相同的)
答案 0 :(得分:2)
您可以将按钮更改为布尔字段,并将my_button
方法设为onchange
。
my_button = fields.Boolean('Label')
@api.multi
@api.onchange('my_button')
def onchange_my_button(self):
for record in self:
# whatever my_button does
如果您希望它仍然显示为按钮,您可以将标签显示为按钮并隐藏实际的复选框。
<label for="my_button" class="btn btn-sm btn-primary"/>
<field name="my_button" invisible="1"/>
答案 1 :(得分:0)
默认情况下,当任何服务器端代码在触发任何事件时都会呈现(如按钮点击),然后记录将首先保存,您将获得自我中的记录(调用对象)。
因此,一旦您点击该按钮,就意味着该记录已保存在数据库中,之后不会有丢弃效果。
您可以在Sales Quotation / Order
中看到的最佳示例有一个链接&#34; 更新&#34;只会从它执行的方法返回True,但是一旦调用该方法,那么整个记录将被保存并且总计(所有功能字段将被计算)并且你觉得更新链接执行计算(该链接在编辑中可见)仅限模式。
通常在按钮点击调用的新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
因此,当您单击该按钮时,首先记录保存,然后将调用方法。