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)

【转】odoo学习之:API整合文档的更多相关文章

  1. SpringBoot整合Swagger2搭建API在线文档

    Swagger,中文"拽"的意思,它是一个功能强大的在线API在线文档,目前它的版本为2.x,所以称为Swagger2.Swagger2提供了在线文档的查阅和测试功能.利用Swag ...

  2. golang学习笔记7 使用beego swagger 实现API自动化文档

    golang学习笔记7 使用beego swagger 实现API自动化文档 API 自动化文档 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/doc ...

  3. 整合swagger2生成Restful Api接口文档

    整合swagger2生成Restful Api接口文档 swagger Restful文档生成工具 2017-9-30 官方地址:https://swagger.io/docs/specificati ...

  4. Api接口文档管理工具,你知道哪些呢?

    上周看到有人在我的Github开源项目中提了个issue,说是否考虑接入swagger.那今天我就用swagger与其他接口文档工具做对比,同时说说Api接口文档工具的那点事.如今,在前后端分离开发的 ...

  5. Javascript学习8 - 脚本化文档(Document对象)

    原文:Javascript学习8 - 脚本化文档(Document对象) 每个Web浏览器窗口(或帧)显示一个HTML文档,表示这个窗口的Window对象有一个document属性,它引用了一个Doc ...

  6. ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

    分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...

  7. RESTful API接口文档规范小坑

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 前后端分离的开发模式,假如使用的是基于RESTful API的七层通讯协议,在联调的时候,如何避免配合过程中出现问 ...

  8. Swagger解决你手写API接口文档的痛

    首先,老规矩,我们在接触新事物的时候, 要对之前学习和了解过的东西做一个总结. 01 痛     苦 不做.不行 之前,前后端分离的系统由前端和后端不同的编写,我们苦逼的后端工程师会把自己已经写完的A ...

  9. SpringBoot + Swagger2 自动生成API接口文档

    spring-boot作为当前最为流行的Java web开发脚手架,相信越来越多的开发者会使用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于移动端 ...

随机推荐

  1. linux环境下 C++性能测试工具 gprof + kprof + gprof2dot

    1.gprof 很有名了,google下很多教程 g++ -pg -g  -o test test.cc ./test   //会生成gmon.out gprof ./test > prof.l ...

  2. Python错误和异常概念(总)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6435956.html 本文出自:[Edwin博客园] Python错误和异常概念(总) 1. 错误和异常的处 ...

  3. SQL脚本修改表结构

    SQL脚本修改表结构 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default ...

  4. python对列表中的字典进行排序

    数据显示为: rows=[{'日期': '2018-09-04', '测试1': '50.00 %', '测试2': '100.00%'}, {'日期': '2018-09-05', '测试1': ' ...

  5. jquery实现的时间轴

    代码 样式文件style.css 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...

  6. Ubuntu root 密码忘记-恢复

    @Ubuntu root 密码忘记-恢复 2012-04-27 11:09:22 方法一: 如果用户具有sudo权限,那么直接可以运行如下命令: #sudo su root #passwd #更改密码 ...

  7. 渲染、render与绘制

    渲染是抽象到具体的过程: 抽象:图片信息的描述(比如一条线:两个端点的位置.线粗.颜色等特征): 具体:依据抽象信息得到的可视图片(绘制过程). 渲染是中文翻译的问题,有种添油加醋的感觉.直意就是交与 ...

  8. 五子棋项目总结 JavaScript+jQuery(插件写法)+bootstrap(模态框)

    Html部分(界面): 1.五子棋棋盘由canvas完成: 2.两个按钮,样式由bootstrap完成: 3.菜单按钮对应的模态框,可以选择游戏模式:玩家自由对战,和电脑对战,还可以指定谁先执子和哪个 ...

  9. 折腾一下WebSocket的ArrayBuffer传输方式

    前言   之前写WebSocket都是基于文本传输的,后来准备升级项目,于是打算尝试一下arraybuffer传输方式,由于是第一次使用javascript处理字符串转arraybuffer,不过真的 ...

  10. 文件断点上传,html5实现前端,java实现服务器

    断点上传能够防止意外情况导致上传一半的文件下次上传时还要从头下载,网上有很多关于断点的实现,这篇文章只是从前到后完整的记录下一个可用的实例,由于生产环境要求不高,而且就是提供给一两个人用,所以我简化了 ...