当前位置: 首页 > news >正文

Odoo 二次开发教程(五)-新API的介绍与应用

【关于odoo新API的介绍,Internet上资料很少,或者不够完整详实,这会对初学者造成很大的困惑,本篇的目的就是希望能帮助新手了解新API的大概】

odoo 新api的实现是借助于python装饰器,关于python装饰器的知识,请自行参考python相关手册。

新API的装饰器主要有以下几种:

model,multi,one

constrains,depends,onchange,returns

还有一些像

cr,cr_context,cr_uid,cr_uid_context,cr_uid_id,cr_uid_id_contet,cr_uid_ids,cr_uid_ids_context

这些主要用于一些特定的方法。

一、one

one的用法主要用于self为单一集合的情况,与之相对应的是multi。被one装饰的方法会返回一个list(某些误人子弟的教程说one不返回值的,实际是返回了[None]),对于v7版本中类似于 def funct(self,cr,uid,ids,context)的方法可以用api.one装饰器改用v8写法。

例子:

 

二、multi

与one相对应,one要求self是单一记录,而multi则要求self是多个记录的合集。

三、model

model要求self是一个记录集,env中并不包含ids参数,即适用于v7中类似于 def funct(self,cr,uid,args,context)的方法。 

 

四、contrains

已经在上篇文章中介绍过,略过不讲。

五、depends

depends 主要用于compute方法,v8当中已经取消了function字段,对于任何fields都可以通过添加compute属性动态赋值。depends就是用来标该方法依赖于哪些字段的装饰。

例如我们让学员你的年龄等于学员的编号+1(非常扯淡的逻辑,只做演示):

事实上,不一定非要使用depends装饰,去掉depends装饰后,以上的代码仍然work,只不过运行的时机有了改变,这是为什么呢?请各位同学看官自行体会。

插曲:我们知道7.0中function字段是默认不存储的,需要使用store参数进行存储。v8当中所有带有compute参数的字段默认都不会存储,store参数也变成了boolean类型,不再提供store的触发函数。这里使用depends的字段就相当于v7当中的trigger,当依赖的字段发生改变时,会触发这里的函数对数据库进行更新。但如果depends依赖的字段也没有存储,那么依旧不会触发。

对于存储的目的是用来搜索的童鞋来说,我们提供另外一种实现方式,将在后续的文章中提到,敬请期待。

六、onchange

onchange的使用方法非常简单,就是当字段发生改变时,触发绑定的函数。

七、returns

returns的用法主要是用来指定返回值的格式,它接受三个参数,第一个为返回值的model,第二个为向下兼容的method,第三个为向上兼容的method

第一个参数如果是对象本身,以'self',如果是其他对象,则写其他对象名如:@api.returns('ir.ui.view')

例子:

注意看第二个例子,如果调用该方法的是一个v7版本的方法,返回值将进行向下兼容的转化,即通过第二个参数的lamda表达式返回该记录的id。

总结:

本文只对常见的几种API进行了详细的介绍,更多内容请关注本博客(http://www.cnblogs.com/kfx2007/)的其他文章。

 

相关文章:

  • 代码托管工具 git
  • How can I determine the URL that a local Git repository was originally cloned from?
  • Idea14解决JSP/JS文件需要重启问题解决
  • 解决Ubuntu Kylin 1610安装ANSYS17.2的NVIDIA显卡驱动问题
  • java设置代理的几种方式
  • 二叉查找树转双向链表JAVA实现
  • VC++ 一个简单的Log类
  • java基础加强
  • 23种设计模式总结(三)
  • 一个WIndows Server 2008 R2 AD组策略复制排错过程(Warning 13508)
  • 两个基本概念 标称型数据和数值型数据
  • bootstrap 不兼容ie8 的问题
  • Frenetic Python实验(三)
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • Java内存模型深度解析:重排序 --转
  • php的引用
  • [数据结构]链表的实现在PHP中
  • 2017前端实习生面试总结
  • 3.7、@ResponseBody 和 @RestController
  • Idea+maven+scala构建包并在spark on yarn 运行
  • IOS评论框不贴底(ios12新bug)
  • JAVA_NIO系列——Channel和Buffer详解
  • Javascript设计模式学习之Observer(观察者)模式
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Swift 中的尾递归和蹦床
  • XML已死 ?
  • 聚类分析——Kmeans
  • 力扣(LeetCode)56
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 项目实战-Api的解决方案
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • ​​​​​​​​​​​​​​Γ函数
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​批处理文件中的errorlevel用法
  • #Linux(make工具和makefile文件以及makefile语法)
  • #Lua:Lua调用C++生成的DLL库
  • (4)Elastix图像配准:3D图像
  • (python)数据结构---字典
  • (搬运以学习)flask 上下文的实现
  • (定时器/计数器)中断系统(详解与使用)
  • (二)windows配置JDK环境
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (力扣)1314.矩阵区域和
  • (数据结构)顺序表的定义
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)Windows2003安全设置/维护
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET Core中的去虚
  • .NET 中的轻量级线程安全
  • @Autowired注解的实现原理
  • @hook扩展分析
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [AIGC] 如何建立和优化你的工作流?
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)