Bom*_*Man 16
通常两个decoarator都用于装饰记录式方法,其中' self'包含记录集.让我简要解释何时使用@api.one和@api.multi:
1 @api.one .:
装饰一个记录式的方法,其中' self '应该是一个单例实例.
装饰方法自动循环记录(即,对于记录集中的每个记录,它调用方法),并生成一个包含结果的列表.
如果方法用@returns修饰,它会连接生成的实例.这样的方法:
@ api.one def方法(self,args):返回self.name
可以在记录和传统样式中调用,例如::
# recs = model.browse(cr, uid, ids, context)
names = recs.method(args)
names = model.method(cr, uid, ids, args, context=context)
Run Code Online (Sandbox Code Playgroud)
2 . @api.multi :
装饰一个记录式方法,其中' self'是记录集.该方法通常定义对记录的操作.这样的方法:
@ api.multi def方法(self,args):
可以在记录和传统样式中调用,例如::
# recs = model.browse(cr, uid, ids, context)
recs.method(args)
model.method(cr, uid, ids, args, context=context)
Run Code Online (Sandbox Code Playgroud)
何时使用:
如果您使用@ api.one,则返回的值在列表中.Web客户端并不总是支持这一点,例如按钮操作方法.在这种情况下,您应该使用@ api.multi来装饰您的方法,并且可能在方法定义中调用self.ensure_one().
总是更好地使用@ api.multi和self.ensure_one()而不是@ api.one来避免返回值中的副作用.
@api.one:
该装饰器会自动为您在 RecordSet 的 Records 上循环。Self 被重新定义为当前记录:
@api.one
def func(self):
self.name = 'xyz'
Run Code Online (Sandbox Code Playgroud)
@api.multi:
Self 将是当前的 RecordSet,无需迭代。这是默认行为:
@api.multi
def func(self):
len(self)
Run Code Online (Sandbox Code Playgroud)
有关所有 API 的详细说明,您可以参考此链接
| 归档时间: |
|
| 查看次数: |
10851 次 |
| 最近记录: |