Odoo13实现form视图按钮定制开发的技巧
2023-12-27 03:00:48
前言
在Odoo13中,form视图的所有按钮按钮都会触发保存操作,而odoo默认的保存操作会触发验证,就是说odoo会先验证保存完表单,再去执行按钮对应的方法。但是在某些情况下,我们只是想单纯的实现按钮对应的功能,并不想触发保存操作和验证。例如,我们在form视图中有一个按钮,用于打开一个新的窗口,此时我们只需要执行按钮对应的打开窗口的方法,而不需要保存表单并触发验证。
实现方法
为了实现上述需求,我们可以使用odoo的几个内置方法来达到目的。
-
env.context.update()
该方法用于更新当前上下文的键值对。我们可以使用该方法将
ignore_save
键的值设置为True
,这样odoo就不会在执行按钮对应的操作之前保存表单并触发验证了。 -
res.model.browse(ids).write(vals)
该方法用于更新模型的记录。我们可以使用该方法直接更新模型的记录,而不需要先保存表单并触发验证。
-
res.model.browse(ids).action_your_action()
该方法用于执行模型的自定义操作。我们可以使用该方法直接执行按钮对应的自定义操作,而不需要先保存表单并触发验证。
具体步骤
-
在form视图中,找到要定制的按钮。
-
在按钮的
on_click
属性中,添加以下代码:on_click="context.update({'ignore_save': True})"
-
在按钮对应的控制器中,修改按钮对应的操作方法,直接使用
res.model.browse(ids).write(vals)
或res.model.browse(ids).action_your_action()
方法来更新模型的记录或执行自定义操作。
实例
以下是一个具体的例子,演示如何使用上述方法来定制form视图中的按钮。
需求:在一个form视图中,有一个按钮,用于打开一个新的窗口。
步骤:
-
在form视图中,找到要定制的按钮。
-
在按钮的
on_click
属性中,添加以下代码:on_click="context.update({'ignore_save': True})"
-
在按钮对应的控制器中,修改按钮对应的操作方法,直接使用
res.model.browse(ids).write(vals)
或res.model.browse(ids).action_your_action()
方法来更新模型的记录或执行自定义操作。
@api.multi
def action_open_window(self):
# 更新模型的记录
self.write({'state': 'done'})
# 执行自定义操作
return {
'type': 'ir.actions.act_window',
'name': 'New Window',
'res_model': 'your.model',
'views': [[False, 'form']],
'target': 'new',
}
总结
通过使用odoo内置的方法,我们可以轻松地定制form视图中的按钮,实现各种自定义操作。