一:纪录集API

model中的数据是以集合的形式使用的,因此可以使用集合运算来操作。

  • 集合运算符

    • record in set返回record是否在set中,record须为单条记录,record not in set反之
    • set1 <= set2 返回set1是否为set2的子集
    • set1 >= set2 返回set2是否为set1的子集
    • set1 | set2 返回set1和set2的并集
    • set1 & set2 返回set1和set2的交集
    • set1 - set2 返回在集合set1中但不在set2中的记录

集合运算API:

  • ids 得到当前记录集合的id列表
  • ensure_one() 验证一个记录集合是否只包含一条记录
  • exists() 返回当前记录集中真正存在的子集,并把缓存中未删除的部分做标记,可用于判断if record.exists():
  • filtered(func) 返回满足func参数内条件的记录集合,参数可以是一个函数或者用.分隔的字段列表
  • sorted(key=None, reverse=False) 返回按key排序之后的记录集,key参数可以是一个返回单个key的函数或字段名称或为空,reverse参数为True时即为倒序
  • mapped(func) 将func函数应用到所有记录上,并返回记录列表或集合

二:运行环境API

运行环境保存了很多ORM相关的变量:数据库查询游标、当前用户、元数据,还存有缓存,可使用env来访问,如:

records.env.user

records.env.cr

records.env.context

更改运行环境:

  • sudo() 使用现有数据集创建一个新运行环境,得到一个基于新运行环境的数据集的拷贝
env['res.partner'].sudo().create({'name': "A Partner"})
  • with_context()
    一个参数时可用于替换当前运行环境的context,多个参数时通过keyword添加到当前运行环境context或单参数时设置的context
  • with_env() 完整替换当前运行环境

三:ORM API

search() 接收domain表达式参数,返回符合条件的数据集合,可以通过limit,offset参数返回一个子集,还可通过order参数对数据排序。

self.search([('is_company', '=', True), ('customer', '=', True)])

search_count():统计满足条件的数据数量

create() 接收多个字段、值的组合,返回新创建的数据集:

self.create({'name': "New Name"})

write() 接收多个字段、值组合,会对指定数据集的所有记录进行修改,不返回:

self.write({'name': "Newer Name"})

browse() 根据数据的id或者一组id来查找,返回符合条件的数据集合:

self.browse([7, 18, 12])

exists() 得到某个数据集中保留在数据库中的那部分(可用于检查数据集是否为空):

if not record.exists():
raise Exception("The record has been deleted")

ref() 运行环境函数,根据提供的外部id返回对应的数据记录:

env.ref('base.group_public')

ensure_one() 检验某数据集是否只包含单条数据,如果不是则报错:

records.ensure_one()

四:搜索函数

  • search(args[, offset=0][, limit=None][, order=None][, count=False])
    根据args参数里的domain表达式来搜索所有记录,参数列表:
    1.args:domain表达式,为空时返回所有记录
    2.offset (int) 从第几条记录开始取
    3.limit (int) 返回记录行数的最大值
    4.order (str) 排序的字段
    5.count (bool) 当值为True的时候只返回匹配记录的条数

  • search_count(args)
    返回根据给定domain表达式参数查询所得到的记录条数

  • name_search(name='', args=, operator='', limit=)
    返回根据name条件来查询,并满足args指定的domain表达式的记录集合

  • name (str) -- 用来匹配的name字符串
    args (list) -- domain表达式列表
    operator (str) -- 用来匹配的操作符,如: 'like' , '='.
    limit (int) -- 可选参数,最多返回的记录行数

五:字段或视图查询

字段查询:

fields_get([fields][, attributes])
以数据字典的形式返回字段的定义,通过继承得来的字段也会在其中,string/help/selection属性会自动被翻译
fields参数是字段列表、为空或不传返回所有字段
attributes 可指定字段的属性、为空或不传时返回全部的

视图查询:

fields_view_get([view_id | view_type=''])
返回指定视图的具体组成如:字段,模型,视图结构
参数列表:
view_id 视图的id或None
view_type 当view_id参数为空时指定视图类型如form,tree等
toolbar 参数为true时将上下文动作包含在内

default_get(fields) 获取指定字段的默认值

name_get() 以列表形式返回每条记录的描述,默认是display_name字段

name_create(name) 相当于调用create方法创建一条新记录而只设置一个display_name

odoo开发教程九:Odoo10 API的更多相关文章

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

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

  2. QQ空间开放平台开发教程-SDK和API的使用

    <?php /** * OpenAPI V3 SDK 示例代码,适用于大部分OpenAPI.如果是上传文件类OpenAPI,请参考本SDK包中的“Test_UploadFile.php”文件中的 ...

  3. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(十九):MessageHandler 的未知类型消息处理

    这是<微信开发深度解析:微信公众号.小程序高效开发秘籍>出版之后写的第一篇微信相关的文章.从这一篇开始,将介绍第一版出版之后添加或修改的功能,或者对书上内容需要做的补充. MP v14.8 ...

  5. iOS 11开发教程(十九)iOS11应用视图美化按钮之设置按钮的外观

    iOS 11开发教程(十九)iOS11应用视图美化按钮之设置按钮的外观 美化按钮说白了就是对按钮的属性进行设置,设置按钮的属性有两种方法:一种是使用编辑界面中的属性检查器:另一种是使用代码进行设置.以 ...

  6. iOS 11开发教程(九)iOS11数据线连接真机测试

    iOS 11开发教程(九)iOS11数据线连接真机测试 在Xcode 7.0之后,苹果公司在开发许可权限上做了很多的改变,在测试App方面取消了一些限制.在Xcode7.0之前的版本,苹果公司只向注册 ...

  7. odoo开发安装插件教程小技巧

    安装Odoo插件时而可能很繁琐且易于出现未知错误.当Odoo出现错误提示时.您需要深层次查询内核模块,安装其它依赖插件,下载全部插件,将它们放到恰当的部位,点安装,随后处理错误,然后再次测试,直至凡事 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明

    前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新. 本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4 ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...

  10. Senparc.Weixin.MP SDK 微信公众平台开发教程(四):Hello World

    =============  以下写于2013-07-20 ============= 这一篇文章其实可以写在很前面,不过我还是希望开发者们尽多地了解清楚原理之后再下手. 通过上一篇Senparc.W ...

随机推荐

  1. 17.explicit关键字

    c++提供了关键字explicit,禁止通过构造函数进行的隐式转换.声明为explicit的构造函数不能在隐式转换中使用. [explicit注意] ● explicit用于修饰构造函数,防止隐式转化 ...

  2. CPU 100%问题排查总结

    更多内容,移步IT-BLOG 排查思路 [1]定位高负载进程 pid:登录进服务器使用 top 或 top -c命令[ps -ef | grep xxx 命令]查看当前 CPU消耗过高的进程,从而得到 ...

  3. .NET生成MongoDB中的主键ObjectId

    前言 因为很多场景下我们需要在创建MongoDB数据的时候提前生成好主键为了返回或者通过主键查询创建的业务,像EF中我们可以生成Guid来,本来想着要不要实现一套MongoDB中ObjectId的,结 ...

  4. 我为什么推荐Nuxt3

    我为什么推荐Nuxt3? 大家好,我今天想和你们分享一个非常棒的前端框架--Nuxt3.自从我接触了Nuxt3,我发现它在前端开发领域具有很多优点.我想逐一向你们介绍Nuxt3的优势,并向大家推荐一些 ...

  5. Centos7安装配置MySQL 5.6

    Centos7安装配置MySql 5.6 首先下载MySql5.6的安装包,具体安装方式分为yum安装与离线安装.在新版本的CentOS7中,默认的数据库已更新为了Mariadb,而非 MySQL. ...

  6. 刷爆 LeetCode 周赛 339,贪心 / 排序 / 拓扑排序 / 平衡二叉树

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周末是 LeetCode 第 339 场周赛,你参加了吗?这场周赛覆盖的知识点比较少, ...

  7. vue之字符串的方法

    目录 简介 indexOf方法 简介 本文会把遇到的字符串的方法慢慢补充进来 indexOf方法 indexOf方法判断字符串是否包含另一个字符串 判断结果如果包含返回的是索引,如果不包含,则返回-1 ...

  8. 配置了一台3700X电脑后

        众所周知,电脑是生活中必不可少的玩具,最近搞了一套配置.CPU3700X,显卡RX580,内存32GB.敲,这CPU的框框,看见就爽的不得了. As we all know, a comput ...

  9. StampedLock:JDK1.8中新增,比ReadWriteLock还快的锁

    摘要:StampedLock是一种在读取共享变量的过程中,允许后面的一个线程获取写锁对共享变量进行写操作,使用乐观读避免数据不一致的问题,并且在读多写少的高并发环境下,比ReadWriteLock更快 ...

  10. [Chrome]插件的导出与导入[转载]

    1 文由 毕竟是在墙内,暂时又没有有效的FQ工具,换设备了,但需要使用原先旧设备下载的插件.只能出此下策liao~ 2 导出插件 step1 Chrome: 进入插件管理界面 Chrome: 更多工具 ...