如何从自动保存中停止Odoo自定义按钮?

时间:2017-05-30 12:39:45

标签: openerp odoo-10

我在视图中创建了一个触发模块内部方法的按钮。但是,点击该按钮时,会保存临时编辑的字段,而不会在点击“放弃”时将其还原。按钮。

以下是我的观点代码:

<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不再有效。

enter image description here

如何在单击自定义按钮时阻止Odoo保存临时数据?

(我正在使用Odoo10,但我猜它对于旧版本的Odoo来说是相同的)

2 个答案:

答案 0 :(得分:2)

您可以将按钮更改为布尔字段,并将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"/>

答案 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

因此,当您单击该按钮时,首先记录保存,然后将调用方法。