Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

新api的one和multi有什么区别?



  • 近段时间在研究新api,不过对于新api的一些装饰器的用途不是很清楚。<br />例如,@api.one和@api.multi有什么区别?



  • 近段时间在研究新api,不过对于新api的一些装饰器的用途不是很清楚。<br />例如,@api.one和@api.multi有什么区别?



  • @api.one 表示勒是一个针对单记录而写的.<br />@api.multi 表示勒是一个针对多条记录处理而写的.<br />


  • 管理员

    [quote author=mrshelly link=topic=17330.msg31141#msg31141 date=1444810982]<br />@api.one 表示勒是一个针对单记录而写的.<br />@api.multi 表示勒是一个针对多条记录处理而写的.<br /><br />[/quote]<br /><br />如上,@api.one 的self是单条纪录,如果传入的是一个list他会循环执行。@api.multi的self是多条纪录。<br />然后注意的是 @api.one的最终返回结果是会把每次执行的结果合并成为一个list再返回。<br /><br />



  • 很好,清楚明白。感谢楼上两位的回复



  • @api.one的最终返回结果是会把每次执行的结果合并成为一个list再返回。<br /><br />这句不太懂,举个栗子?



  • [quote author=Jeff link=topic=17330.msg31153#msg31153 date=1444916784]<br />@api.one的最终返回结果是会把每次执行的结果合并成为一个list再返回。<br /><br />这句不太懂,举个栗子?<br />[/quote]<br /><br />我理解的应该是这样子的。假如有一个方法定义:<br />def test(self,cr,uid,ids,context=None):<br />    print ids<br />    return ids*2<br /><br />如果前加的是@api.one,并且ids参数转入的是[1,2,3]的话,这个方法会执行三次,依次输出的ids是:<br />>>>1<br />>>>2<br />>>>3<br />虽然执行了三次,但对其它调用该方法的地方来说,不可能需要接收三个返回值,所以它就把这多个返回值合并成了一个list返回,这里的结果应该是[2,4,6]<br /><br />如果前面加的是@api.multi,那就好理解了,方法只执行一次,输出的结果也只有一次,是[1,2,3],返回值是[1,2,3,1,2,3]


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待