【问题标题】:How can I stop Odoo custom button from auto save?如何阻止 Odoo 自定义按钮自动保存?
【发布时间】:2017-10-30 22:44:29
【问题描述】:

我在视图中创建了一个按钮,该按钮触发模块内的方法。但是,单击按钮时,临时编辑的字段将被保存,并且在单击“放弃”按钮时不会恢复。

这是我的观点的代码:

<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 也是如此)

【问题讨论】:

  • 找到相同的...
  • 您的my_button 方法有什么作用?您也许可以将您的按钮更改为布尔字段,并使您的 my_button 方法成为 onchange
  • 我认为带有布尔字段的想法听起来很有趣,但是如何使我的布尔字段看起来像一个按钮?我知道有widget="boolean_button",但它再次被一个按钮包围 - 因此触发了相同的行为(它保存了我的视图)。但也许我可以使用这个想法 - 显示一个复选框......
  • @travisw 谢谢你的帮助。使用布尔字段而不是按钮对我来说是一个很好的解决方案。
  • @travisw:我建议您发布该评论作为答案,它可能对其他人有所帮助。

标签: openerp odoo-10


【解决方案1】:

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

【讨论】:

  • 这太棒了!谢谢。
【解决方案2】:

默认情况下,在 odoo 中,任何服务器端代码都会在您触发任何事件(点赞按钮单击)后呈现,然后无论如何都会首先保存记录,然后您将在 Self 中获取记录(调用对象)。

所以一旦你点击了那个按钮,就意味着记录已经保存在数据库中,之后就没有丢弃的效果了。

您可以在Sales Quotation / Order 中看到的最佳示例有一个链接“Update”,它只会从它不执行任何操作的方法返回 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

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

【讨论】:

  • 感谢您的详细解释。所以你看不到用按钮解决我的任务的可能性吗?
  • 对于这类操作 onchange 事件应该是可取的,但这取决于它是否适合您的要求。 @travisw 提出了实现这一目标的非常好的方法。
猜你喜欢
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多