何时在odoo | openerp中使用api.one和api.multi?
最近,odoo(前身为OpenERP)V8已经发布。在新的API方法中,引入了修饰符。在何时在odoo | openerp中使用api.one和api.multi?,openerp,odoo,openerp-8,Openerp,Odoo,Openerp 8,最近,odoo(前身为OpenERP)V8已经发布。在新的API方法中,引入了修饰符。在models.py中,方法需要用@api.one或@api.multi修饰 我无法确定确切的用途。有人能详细解释一下吗 谢谢。通常这两个解码器都用于装饰记录样式方法,其中“self”包含记录集。让我简要解释一下何时使用@api.one和@api.multi: 1.@api.one: 装饰一个记录样式方法,其中“self”应该是一个单例实例 修饰的方法会自动在记录上循环(即,对于记录集中的每个记录,它调用该方
models.py
中,方法需要用@api.one
或@api.multi
修饰
我无法确定确切的用途。有人能详细解释一下吗
谢谢。通常这两个解码器都用于装饰记录样式方法,其中“
self
”包含记录集。让我简要解释一下何时使用@api.one
和@api.multi
:
1.@api.one
:
- 装饰一个记录样式方法,其中“self”应该是一个单例实例
- 修饰的方法会自动在记录上循环(即,对于记录集中的每个记录,它调用该方法),并生成一个包含结果的列表
- 如果该方法用@returns修饰,它将连接结果实例。这种方法: @api.1 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)
# recs = model.browse(cr, uid, ids, context)
recs.method(args)
model.method(cr, uid, ids, args, context=context)
- 每次“自我”被重新定义为当前记录时
@api.multi
:
- 修饰一个记录样式方法,其中“
”是一个记录集。该方法通常定义对记录的操作。这种方法: @api.multi def方法(self,args):self
# recs = model.browse(cr, uid, ids, context)
names = recs.method(args)
names = model.method(cr, uid, ids, args, context=context)
# recs = model.browse(cr, uid, ids, context)
recs.method(args)
model.method(cr, uid, ids, args, context=context)
何时使用:
@api.one: 此装饰器会自动为您在记录集的记录上循环。Self被重新定义为当前记录:
@api.one
def func(self):
self.name = 'xyz'
@api.multi:
Self将是当前记录集,无需迭代。这是默认行为:
@api.multi
def func(self):
len(self)
有关所有API的详细描述,只要我看到方法装饰器允许指定如何处理内部记录的语义信息,就可以参考此。关于“何时使用api.multi”这一点。此标准是否基于webclient支持?在所有情况下,这些问题都无法通过api.return解决?我认为这样我们就牺牲了语义信息,这些信息对ORM进行优化和决定正确的调用非常有用。我认为这就像在ORM不支持某些操作时使用越来越多的SQL语句,而不是改进它。@BomberMan感谢您的详细解释!这解开了我的谜团:)我想知道为什么我收到了我的方法列表:)回答得好!只想补充一点:@api.one由于v9.0()而被弃用。请尽量避免将代码作为答案,并尝试解释它的作用和原因。对于没有相关编码经验的人来说,您的代码可能并不明显。