odoo 中 "warning" 和 "UserError" 有什么区别?

What is the difference between "warning" and "UserError" in odoo?

警告:

warning = {
                    'title': _('Warning!'),
                    'message': _('Exists the discount limit'),
                }
            return {'warning': warning}

用户错误

raise UserError(_('Exists the discount limit'))

odoo中的Warning和UserError有什么区别

当 python 中出现异常时。它向上传播调用堆栈,直到它在 Odoo 上被处理。响应 Web 客户端调用的 RPC 层捕获所有异常,并且根据异常 class,它会在 Web 客户端上触发不同的可能行为。

UserError 将在其在 odoo.exceptions class 中定义的用户界面中显示错误消息。配方代码将 OSError 更改为 UserError 以确保以友好的方式显示消息。在所有情况下,当前数据库事务都会回滚。在 Odoo 9 和 10 中使用 UserError 来显示错误信息。

警告:在 Odoo 8 中,openerp.exception.Warning 在 9 和 10 中扮演了 UserError 的角色,它已被弃用,因为名称是欺骗性的(这是一个错误而不是警告)它与 python 内置警告 class 相撞,它是为了向后兼容而保留的,你应该在 odoo 中使用 UserError 9 和 10.

在你的情况下,我们 return 警告这意味着它只向用户显示警告消息,交易不会回滚。

简单回答一下,在odoo中两者是一样的。因为如果你签入 odoo/exception.py refer odoo exception here

它清楚地理解它是指 Warning 为 UserError。 odoo 警告在 odoo v9 和 v10 中被弃用,因为与 python 内置的歧义或冲突。

要获取有关 python 警告的信息,请参阅 python warning documentation

所以建议使用odoo.exceptions.UserError而不是警告

A warning 是一个 python 关键字并且 UserError 在 Odoo 中使用,而在 odoo 中 warning 在 odoo 中被弃用v9 及以后。

所以我们在 Odoo 中使用了 UserError