Odoo中文网|Odoo实施培训

 找回密码
 立即注册
搜索
热搜: Odoo OpenERP 实施
查看: 7638|回复: 0
打印 上一主题 下一主题

odoo 新API装饰器中one、model、multi的区别[转]

[复制链接]

119

主题

119

帖子

566

积分

高级会员

Rank: 4

积分
566
跳转到指定楼层
楼主
发表于 2017-3-21 22:37:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.one装饰器详解
odoo新API中定义方式:
  1. date=fields.Date(string="date",compute="_get_date")  

  2. @api.one  
  3. def _get_date(self):  
  4.     self.date=fields.Date.today()  
复制代码
其实说的易懂些,等同于旧API的function 类型的简化版,但是需要特别注意到是one装饰类无返回值。

2. multi装饰类详解
odoo新API中定义方式:
1.本人一般将multi装饰类用于tree试图模式的报表中,如下图实例:
         
  1. @api.multi  
  2. def action_done(self):  
  3.     return {  
  4.                 'name': _(u'科目'),  
  5.                 'view_type': 'form',  
  6.                 "view_mode": 'tree,form',  
  7.                 'res_model': 'account.account',  
  8.                 'type': 'ir.actions.act_window',  
  9.                 'domain': [('id', 'in', return_list)],  
  10.                 'views': [(tree_id, 'tree'), (form_id, 'form')],  
  11.                 'view_id': [tree_id],  
  12.             }  
复制代码
2.multi使用可以参考one装饰类,不过multi类有返回值。
3.model装饰类,该装饰类一般用于定义定时任务的方法中
  1. @api.model  
  2. def action_done(self):  
  3.      .......  
  4.      .......  
复制代码
类似于旧API:
  1. def action_done(self,cr,uid,context=None):  
  2.     pass  
复制代码
通过实例,可以看出model装饰类,是没有ids传入的,但是他可以有返回值。

总结:

1.其实通过上面的实例不难看出,model与multi可以有返回值,而one是没有返回值的,如果用one装饰器,即使写了return,也是没有作用的,虽然不会报错,但是如果不知道原因的瞎折腾也是比较折磨人的
2.还有一点区别的是multi与one装饰类是有ids传入的,而model没有ids传入。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|技术支持|开发手册|Odoo中文网-远鼎旗下odoo培训网站 ( 苏ICP备15039516号 )

GMT+8, 2024-4-24 15:35 , Processed in 0.011366 second(s), 10 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表