---------
更新时间
18:06 2016-09-18 星期日
-------

*前言
   我用的是odoo8,但里面有相当多的api是以前版本,这时若我们自己开发的
   插件采用新版本api,里面又要调用旧版本api.如何操作
   个人建议自己扩展功能尽量采用新版本api
  
* 版本api对比
     from openerp.osv import fields, osv
    
     class MyModel(osv.osv):
        pass...
    -------------   
    class MyModel(osv.Model):
        pass...   
    -------------------
     新版
    from openerp import api, fields, models    
   
    class MyModel(models.Model):
        pass...
       
    模型则定义的api版本,跟在后面的字段定义和方法定义
    也就要相应的写法,这里不要混写了

* 新旧版方法
   def compute(self, cr, uid, from_currency_id, to_currency_id, from_amount,
                round=True, context=None):   
       pass...
    ---------------
    新版
   def onchange_currency_custom(self):   
      pass...
     
   很明显看到新版少了self,cr,uid context

* 新旧版调用
  这个主要区分在获取模型的方法
   旧版:self.pool['模型名']  或 self.pool.get('模型名')
   新版:self.env['模型名']  或 self.env.get('模型名') 
  
  举一例:
  旧版
  currency_obj = self.pool['res.currency']
  v = currency_obj.compute(self.env.cr, self.env.uid, currency_id, acc.company_id.currency_id.id, amount, context=context)
  ------
  新版
  account_obj = self.env['account.account']
  acc = account_obj.browse(account_id)
 
  ------
  只有你采用旧版获取模型方法,才可以调用旧版模型中定义的方法
  若定义方法用了@api.v7 和@api.v8定义兼容方法,这时调用时就可随便一些
  也是因为官方有太多老版,才在这里讲解,否则有些同仁一直会为参数不匹配烦恼。
 
* 新api调用旧api桥梁
    >>> # method in the old API style
    >>> def old_method(self, cr, uid, ids, context=None):
    ...    print ids

>>> # method in the new API style
    >>> def new_method(self):
    ...     # system automatically infers how to call the old-style
    ...     # method from the new-style method
    ...     self.old_method()

>>> env[model].browse([1, 2, 3, 4]).new_method()
    [1, 2, 3, 4]
   
* @api.model
    @api.model
    def some_method(self, a_value):
        pass
    # can be called as
    old_style_model.some_method(cr, uid, a_value, context=context)
    # 没用用ids
   
* @api.multi
    @api.multi
    def some_method(self, a_value):
        pass
    # can be called as
    old_style_model.some_method(cr, uid, [id1, id2], a_value, context=context)
    #和@api.model 就是相差,带了ids列表,但可以看到这是一个可选项
   
* @api.returns('self')
  假定返回值为记录集
   >>> @api.multi
    ... @api.returns('self')
    ... def some_method(self):
    ...     return self
    >>> new_style_model = env['a.model'].browse(1, 2, 3)
    >>> new_style_model.some_method()
    a.model(1, 2, 3)
    >>> old_style_model = pool['a.model']
    >>> old_style_model.some_method(cr, uid, [1, 2, 3], context=context)
    [1, 2, 3]

(36)老版和新版API调用的更多相关文章

  1. CSS3弹性盒模型新版和老版写法差异

    1.在使用弹性盒模型的时候父元素必须要加display:box 或 display:inline-box: 新版弹性盒模型:flex:display : flex 老版弹性盒模型:box : disp ...

  2. 使用Qpython3制作老版天翼飞TP路由器拨号脚本

    #幻境拨号python版 #by 1414641776 account='xxxxxx@96301' password='xxxxx' # 路由器脚本 def sendToRoute(account, ...

  3. Sphinx中文分词安装配置及API调用

    这几天项目中需要重新做一个关于商品的全文搜索功能,于是想到了用Sphinx,因为需要中文分词,所以选择了Sphinx for chinese,当然你也可以选择coreseek,建议这两个中选择一个,暂 ...

  4. Sphinx中文分词详细安装配置及API调用实战

    这几天项目中需要重新做一个关于商品的全文搜索功能,于是想到了用Sphinx,因为需要中文分词,所以选择了Sphinx for chinese,当然你也可以选择coreseek,建议这两个中选择一个,暂 ...

  5. Visual Studio 发布新版API智能提示

    Visual Studio 新版API智能提示两周前发布.有了它,你可以在调用API的同时,方便了解到API的相关示例代码.这大大地有助于开发人员学习和使用API. 安装方法如下: 1. 打开Visu ...

  6. (转)Sphinx中文分词安装配置及API调用

    这几天项目中需要重新做一个关于商品的全文搜索功能,于是想到了用Sphinx,因为需要中文分词,所以选择了Sphinx for chinese,当然你也可以选择coreseek,建议这两个中选择一个,暂 ...

  7. 转载 基于JAVA每月运势api调用代码实例

    代码描述:基于JAVA每月运势api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/58 原文链接:http://outofmemory.cn/code-snip ...

  8. MidoNet 安装(Kilo RDO)(最老版)

    一.初始化(Kilo RDO)版(最老版) 环境介绍 系统 CentOS 7.3 主机ip 10.211.55.5 主机名 midonet 1.配置yum源 ###OpenStack源 yum ins ...

  9. 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用

    版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/640268001487425627 来源:腾云阁 h ...

随机推荐

  1. RML Utilities for SQL Server

    很早以前有看到过关于使用RML Utilities工具分析SQL Trace(.trc)的文章,但一直没有具体实践.最近接管一台数据库服务器,跟踪出一批高消耗的语句,老大需要跟踪分析报表,罗列出过程( ...

  2. Rstudio使用记录

    2016/11/1 目前新建两个project:project1(有两个变量x,y)&&project2(无变量)

  3. # java对xml文件的基本操作

    下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...

  4. mysql的一些基本操作语句

    -- 创建一个php2016的数据库create database php2016;-- 查看数据库的创建创建语句show create database php2016;-- 指定默认的操作数据库u ...

  5. Hibernate Validator验证标签说明

    Hibernate Validator是JSR-303的一个实现. 在FormBean里添加Hibernate Validator的注解,与定义一个校验类的做法相比.注解更加简洁.灵活. Bean V ...

  6. 模板 KMP

    [模板]KMP int next[N]; char str1[M],str2[N]; //str1 长,str2 短 //len1,len2,对应str1,str2的长 void get_next(i ...

  7. Android -- 自定义View小Demo,绘制四位数随机码(一)

    1,现在有这样一个需求,实现显示随机随机数可能在代码中直接很简单的就实现了,但是现在我们直接自定义View来实现这个效果,那么我们来分析一波吧,我们允许开发者自己设置这个textview的大小,颜色, ...

  8. ReferenceEquals和 == 和equals()的比较

    对于这几点的区别网上经常有各种答案,而且常常会出现答案之间是互相矛盾的.要嘛就是根本含糊的解释不清楚,只是把测试结果扔上来并没有言简意赅的写出他们之间的比较.难道面试的时候考官问你,你也要在纸上写一大 ...

  9. 数据可视化:Echart中k图实现动态阈值报警及实时更新数据

    1 目标 使用Echart的k图展现上下阈值,并且当真实值超过上阈值或低于下阈值时候,标红报警. 2 实现效果 如下:

  10. html里面的相对路径和绝对路径

    HTML有两种路径的写法:相对路径和绝对路径. 相对路径是在同一个目录的文件引用,如果源文件和引用文件在同一个目录里,直接写引用文件名即可. 如: a.html:     c:\test\menu\a ...