首页
登录 | 注册

【转】odoo学习之:API整合文档

Odoo8.0新API文档  
  
一、新API概述  
在8中,api接口分为traditaional style和record style,traditional style指的就是我们在7中使用的类型,def (cr,uid,ids,context)式的语法.而record style精简了参数,只保留了self和args,形如def (self,args)  
 __all__ = [  
      'Environment',  
      'Meta', 'guess', 'noguess',  
      'model', 'multi', 'one',  
      'cr', 'cr_context', 'cr_uid', 'cr_uid_context',  
      'cr_uid_id', 'cr_uid_id_context', 'cr_uid_ids', 'cr_uid_ids_context',  
      'constrains', 'depends', 'onchange', 'returns',  
  ]  
  由api.py文件中的定义可以看出,可供使用的有这么多属性.接下来我们一一看看他们的用法.  
Environment:ORM记录的包装类,封装了cr,uid,context等属性,同时提供了注册访问,记录缓存,管理重新计算的数据结构  
Meta:自动装饰traditional style的装饰类,同时实现了对returns装饰的继承  
guess:该装饰标识方法既可以被traditional style调用也可被record style方式调用  
noguess:阻止所有guess的作用  
model:装饰record-style方法中的self为记录集  
multi:同model,区别在于model中的相当于traditional-style中的model.method(cr,uid,args,context=context),而multi为model.method(cr,uid,ids,args,context=context)  
one:装饰record-style方法中的self为单一实例,被装饰的方法将会在每一条记录中循环调用,返回一个list结果集,如果和@returns一块用了,将返回连接的结果.  
cr:装饰traditional-style方法,标识将cr作为一个参数  
cr_context:装饰traditional-style方法,标识将cr,context作为参数  
cr_uid:装饰traditional-style方法,标识将cr,uid作为参数  
cr_uid_context:装饰traditional-style方法,标识将cr,uid,context作为参数  
cr_uid_id:装饰traditional-style方法,标识将cr,uid,id作为参数  
cr_uid_id_context:装饰traditional-style方法,标识将cr,uid,id,context作为参数  
cr_uid_ids:装饰traditional-style方法,标识将cr,uid,ids作为参数  
cr_uid_ids_context:装饰traditional-style方法,标识将cr,uid,ids,context作为参数  
v7:装饰方法只支持traditional-style api,新api的方法需要重写一个新方法并用v8装饰  
v8:装饰方法只支持record-style api,旧api的方法需要重写一个新方法并用v7装饰  
constrains:返回一个指定了现实了字段限制的方法的字段依赖的装饰器,每个参数都必须是字段  
depends:返回一个指定了compute方法(或new style function fields)的依赖的装饰器,每个参数必须为以.隔开的字段名组成的字符串  
onchagne:返回一个对给出的fields的onchange方法的装饰器,每个参数必须为字段  
returns(model,downgrade=None):返回一个返回参数model的实例的方法的装饰器,参数model:model名或self(当前model),参数downgrade:要从record-style转换成traditional-style的方法  
清除缓存可以使用environment对象的invalidate_all()方法进行  
  
一、新API实例  
search 属性  
通过设置搜索参数,可以使搜索字段上的搜索。该值是返回一个方法名  
实例:  
    upper_name=fields.Char(compute=”_compute_upper” ,search='search_upper')  
    def search_upper(self,operation,value):   #search属性类似于XML中的search试图搜索  
        if operation=='like':  
            operation='ilike'  
        return [('name',operation,value)]  
  
  
inverses属性  
允许在计算字段上设置值,使用该反参数。它是一个函数的名称,它将计算和设置相关字段的名称  
实例:  
    document=fields.Char(compute='compute_document',inverse=''set_document)  
    def compute_document(self):  
        for record in self:  
            with open(record.get_document_path) as f:  
                record.document=f.read()  
    def set_document(self):  
        for record in self:  
            if not record.document:  
                continue  
            with open(record.get_document_path()) as f:  
                f.write(record.document)  
  
  
related属性  
计算字段中的一个特殊情况是关联(代理)字段,它提供的值的是关联字段的当前记录。它们通过设置相关的参数定义,像常规的计算字段,它们可以被存储  
实例:  
    nick_name=field.Char(related='user_id.partner_id.name' ,store=True)  
  
default属性  
设置字段默认值  
实例:  
    a_field=fields.Char(default=”a value”)  
    b_field=fields.Char(default=compute_default_value)  
    def compute_default_value(self):  
        return “a value”  
1.新api之one装饰  
one装饰器的作用是对每一条记录都执行相应的方法  
应用实例:  
    定义columns  
    now=fields.Date(compute=”get_date_now”)  
    方法:  
    def get_date_now(self):  
        self.date=fields.date.now()  
  
  
  
2.新API之environment装饰  
environment类提供了对ORM对象的封装,同时提供了对注册类的访问,记录集的缓存,以及管理重计算的数据结构。对于继承Model类来说可以直接通过self.env对environment进行操作。  
属性列表:  
1.user:返回当前用户  
    self.env.user  
2.lang:返回当前语言代码  
    self.env.lang  
3.in_draft:返回是否处于草稿状态  
    self.env.in_draft  
4.in_onchange:返回是否处于on_change草稿模式  
    self.env.in_onchange  
另外还有cr,registery,cache,prefetch,computed,dirty,todo,mode,all  
应用说明:  
1.利用env[model]获取类对象  
    self.env['ir.model'].search([('state','!=','manual')])  
2.利用cr执行sql语句  
    self.env.cr.execute(query,(value,))  
3.新API之Model装饰  
Model装饰起的作用是返回一个集合列表  
实例:  
定义culomns  
    langs=fields.Selection(string='Lang', selection='get_long')  
定义方法:  
    @api.model  
    def get_long(self):  
        langs=self.env['res.lang'].search([])  
        return [(lang.code,lang.name) for lang in langs]  
实例2:  
    @api.model  
    def some_method(self,a_value):  
        pass  
    等同于  
    old_style_model.some_method(cr,uid,a_value,context=context)  
  
      
4.新API之constrains装饰  
constrains用于对字段进行限制  
实例:  
定义columns  
    age=fields.Integer(string='Age')  
定义方法:  
    @api.constrains('age')  
    def __check_age(self):  
        if self.age>16:  
            raise ValueError(_('age must be older than 16!'))  
  
5. 新API之depends装饰  
  
1.在计算字段值(而不是直接从数据库中读取)时使用的计算参数。它必须将计算值分配给该字段。如果使用其他字段的值,应该使用depends()指定这些字段  
实例:  
    total=fields.Float(compute=“compute_total”)  
@api.depends('value','tax)    
    def compute_total(self):  
        for record in self:  
            record.total=record.value+record.value*record.tax  
  
2. 当使用关联字段是可以指名路径:  
实例:  
    @api.depends('line_ids.values')  
    def compute_total(self):  
        for record in self:  
            record.total=sum([line.value for line in record.line_ids])  
  
  
6.新API之onchange装饰  
当用户更改某个字段的值时(但尚未保存该表单),他可以自动更改基于该字段的字段值,如更改或添加一个新的发票行时,该值自动更新  
  
实例:  
 
    @api.onchage('field1','field2')  
    def check_onchange(self):  
        if self.field1<self.field2:  
            self.field3=True  
  
  
7.  新API之multi装饰  
  
  
实例:  
    @api.multi  
    def some_method(self,a_value):  
        pass  
    等同于  
    old_style_model.some_method(cr, uid, ids, a_avlue,context=context)  
  
8.新API之returns()装饰  
  
返回一个对象的集合  
实例:  
    @api.multi  
    @api.returns('self')  
    def some_method(self):  
        return self  
新的API  
    new_style_method=env['a.model'].browse(1,2,3)  
    print new_style_method.some_method()  
    a,model(1,2,3)  
旧的的API  
    old_style_method=pool['a.model']  
    print old_style_method.some_method(cr,uid,[1,2,3],context=context)  
    [1,2,3]  
  
  
9.with_context()方法  
  
实例:  
context={key1:value1}  
r1=context.with_context({},key2=value2)  
#   r1={key2:value2}  
r2=context.with_context(key2=value2)  
#r2={key1:value1,key2:value2}  
  
二、字段属性  
  
1.default    默认——该字段的默认值;这是一个静态值,或一个函数以一个记录集和返回值  
2.states     状态------字典映射状态值UI属性-值对列表;可能的属性是“只读”,“要求”,“看不见”。注:任何状态为基础的状态需要的状态字段值可在客户端的用户界面。这通常是通过包括它在相关的意见,可能是无形的,如果不相关的最终用户。  
3.groups   组------逗号分隔列表(字符串),这限制了给定的组的用户的字段访问  
4.copy (bool)    复制(bool)——该字段是否值应该复制记录时复制(默认:正常的字段为True,one2many未False)  

 


相关文章

  • 已经更新100+篇~ 关注公众号,BAT大神带你飞~ 听说你还在写Java,看Spring,看Dubbo,今天SpringCloud, 明天Dubbo3.X新版本... 10个开发9个半在写Java后台?框架层出不穷,天天学新东西怕被甩淘汰 ...
  • 使用 ASP.NET Core MVC 创建 Web API(一)
          从今天开始来学习如何在 ASP.NET Core 中构建 Web API 以及每项功能的最佳适用场景.关于此次示例的数据库创建请参考<学习ASP.NET Core Razor 编程系列一>    至  <学习A ...
  • 已迁移到我新博客,阅读体验更佳LDA && NCA: 降维与度量学习 代码实现放在我的github上:click me 一.Linear Discriminant Analysis(LDA) 1.1 Rationale    ...
  • 使用 ASP.NET Core MVC 创建 Web API(五)
    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二)  使用 ASP.NET Core MVC ...
  • 使用 ASP.NET Core MVC 创建 Web API(四)
    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二)  使用 ASP.NET Core MVC ...
  • Day2----Python学习之路笔记(2)
    学习路线: Day1 Day2 Day3 Day4 Day5 ...待续 一.简单回顾一下昨天的内容 1. 昨天了解到了一些编码的知识 1.1. 我们写好的.py文件头没有加# -*- coding:utf-8 -*-这样的声明,那么在Wi ...

2019 cecdns.com webmaster#cecdns.com
12 q. 0.076 s.
京ICP备10005923号