最近odoo(以前的OpenERP)V8已经发布了。在新的 API 方法中引入了装饰器。在models.py
方法需要修饰@api.one
or @api.multi
.
参考odoo 文档 https://www.odoo.com/documentation/8.0/我无法确定确切的用途。谁能详细解释一下。
Thanks.
通常,两个装饰器都用于装饰记录式方法,其中 'self
' 包含记录集(s)。让我简要解释一下何时使用@api.one
and @api.multi
:
1. @api.one
:
装饰一个记录式方法,其中 'self' 预计是一个单例实例。
装饰方法自动在记录上循环(即,对于记录集中的每个记录,它调用该方法),并且列出结果.
-
如果该方法用 @returns 修饰,它将连接结果实例。这样的方法:
@api.one
def 方法(自身,参数):
返回自己的名字
可以以记录风格和传统风格调用,例如:
# recs = model.browse(cr, uid, ids, context)
names = recs.method(args)
names = model.method(cr, uid, ids, args, context=context)
2. @api.multi
:
可以以记录风格和传统风格调用,例如:
# recs = model.browse(cr, uid, ids, context)
recs.method(args)
model.method(cr, uid, ids, args, context=context)
何时使用:
如果您使用@api.one,则返回值位于列表中。
Web 客户端并不总是支持这一点,例如按钮动作
方法。
在这种情况下,您应该使用 @api.multi 来装饰您的方法,并且可能在中调用 self.ensure_one()
方法定义。
最好使用 @api.multi 和 self.ensure_one() 而不是 @api.one 来避免返回值的副作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)