【转】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)
【转】odoo学习之:API整合文档的更多相关文章
- SpringBoot整合Swagger2搭建API在线文档
Swagger,中文"拽"的意思,它是一个功能强大的在线API在线文档,目前它的版本为2.x,所以称为Swagger2.Swagger2提供了在线文档的查阅和测试功能.利用Swag ...
- golang学习笔记7 使用beego swagger 实现API自动化文档
golang学习笔记7 使用beego swagger 实现API自动化文档 API 自动化文档 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/doc ...
- 整合swagger2生成Restful Api接口文档
整合swagger2生成Restful Api接口文档 swagger Restful文档生成工具 2017-9-30 官方地址:https://swagger.io/docs/specificati ...
- Api接口文档管理工具,你知道哪些呢?
上周看到有人在我的Github开源项目中提了个issue,说是否考虑接入swagger.那今天我就用swagger与其他接口文档工具做对比,同时说说Api接口文档工具的那点事.如今,在前后端分离开发的 ...
- Javascript学习8 - 脚本化文档(Document对象)
原文:Javascript学习8 - 脚本化文档(Document对象) 每个Web浏览器窗口(或帧)显示一个HTML文档,表示这个窗口的Window对象有一个document属性,它引用了一个Doc ...
- ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理
分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...
- RESTful API接口文档规范小坑
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 前后端分离的开发模式,假如使用的是基于RESTful API的七层通讯协议,在联调的时候,如何避免配合过程中出现问 ...
- Swagger解决你手写API接口文档的痛
首先,老规矩,我们在接触新事物的时候, 要对之前学习和了解过的东西做一个总结. 01 痛 苦 不做.不行 之前,前后端分离的系统由前端和后端不同的编写,我们苦逼的后端工程师会把自己已经写完的A ...
- SpringBoot + Swagger2 自动生成API接口文档
spring-boot作为当前最为流行的Java web开发脚手架,相信越来越多的开发者会使用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于移动端 ...
随机推荐
- iOS中 Proxy和的delegate区别
在ios中使用proxy代理模式,经常容易和delegate委托模式混淆. 委托模式(delegate),是简单的强大的模式,可让一个对象扮演另外对象的行为.委托对象保持到另外对象的引用,并在适当的时 ...
- Redux 源码解读 —— 从源码开始学 Redux
已经快一年没有碰过 React 全家桶了,最近换了个项目组要用到 React 技术栈,所以最近又复习了一下:捡起旧知识的同时又有了一些新的收获,在这里作文以记之. 在阅读文章之前,最好已经知道如何使用 ...
- Docker扩展.md
逻辑卷 Volume 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 数 ...
- Guava包学习---Bimap
Bimap也是Guava中提供的新集合类,别名叫做双向map,就是key->value,value->key,也就是你可以通过key定位value,也可以用value定位key. 这个场景 ...
- 2594. [WC2006]水管局长数据加强版【LCT+最小生成树】
Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...
- 【QT】QString类型转换为const char*(toLatin1)
Qstring str = "helloworld"; char *s; QByteArray ba = str.toLatin1(); s = ba.data(); toLati ...
- 贪心——HDU-5969 最大的位或
HDU-5969:http://acm.hdu.edu.cn/showproblem.php?pid=5969 一开始也是分了类,觉得要两种情况,l 与 r 位数相同与不同的情况,仔细想一下,可以一起 ...
- 【jQuery】deferred对象了解
deferred对象就是jQuery的回调函数解决方案,在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行. 它 ...
- MAC下常用命令的中文帮助文档(man) 出现错误
MacdeMacBook-Pro:Desktop mac$ tar -xf manpages-zh-1.5.2.tar.bz2 MacdeMacBook-Pro:~ root# cd /Users/m ...
- Kali更新与升级
当用户使用一段时间以后,可能对总是在没有任何变化的系统中工作感到不满,而是渴望能像在Windows系统中一样,不断对自己的Linux进行升级.另外,Linux本身就是一个开放的系统,每天都会有新的软件 ...