odoo 执行方法返回信息,odoo只提供了报错信息返回,但是报错会回滚执行的方法,有没有可以运行方法成功后再返回提示信息的呢,
1.onchange方法是可以作为返回警告信息的,但是onchange方法必须由前端触发不太适用所有情况
@api.onchange('name')
def _onchange_name(self):
return {'warning': {'title': '标题:', 'message': '警告信息'}}
2.使用OCA模块web_notify
def test(self):
self.env.user.notify_success(message='My success message')
这个模块实现了从PY调用JS的方法在页面右上角展示一个小弹窗进行提示信息,
缺点是和报错返回的弹窗不是同一个东西,风格不统一
3.使用Dialog
odoo前端已经封装好了dialog: \odoo\addons\web\static\src\js\core\dialog.js
我们可以将这个封装为一个动作,然后可以在PY中调用
odoo.define('web_ir_actions_dialog_view', function (require) {
'use strict';
var core = require('web.core');
var Dialog = require('web.Dialog');
function AlertDialog(parent, action) {
var dialog = new Dialog(this, action.params);
dialog.open();
}
core.action_registry.add("dialog", AlertDialog);
});
将上面这个js文件引入后,在PY中可以如下调用
def test_fun(self):
return {
'type': 'ir.actions.client',
'tag': 'dialog',
'params': {
'title': '提示信息',
'$content': '<h2 style="color:red; text-align:center; ">123456789</h2>',
'size': 'extra-large',
}
}
tag标签一定是js文件中注册的 'dialog'
params可以填的参数有:
- title: 弹窗的标题
- $content 文本信息,需要写入html
- size 弹窗大小,可选项有(由大到小):'extra-large', 'large', 'medium' 'small'
- buttons 展示按钮,默认值是:[{text: _t("Ok"), close: true}],如果不想展示确认按钮可以传入[]
以上方法参考曹大文章