odoo domain详解

参考的以下文档:

luohuayong:Odoo domain写法及运用

baimo:odoo domain表达式

1、domain 表达式规则

最简单的格式:[(‘字段名’,‘操作符’,值)]

例:[(‘shenqr.user_id’,’=’,uid)]

字段名

如果是Many2one/Many2Many/One2many字段,可以通过’.‘取出对应的属性,如:(‘create_uid.company_id.parent_id’,’=’, user.company_id.id)

操作符

操作符 说明
=,>.<,>=,<=,!= 比较运算,等于,不等于,大于,大于等于,小于,小于等于
like 模糊匹配,通过%value%匹配
=like 可以使用模式匹配,下划线-匹配一个字符,百分号%匹配零或者多个字符
ilike 类似like,但是忽略大小写
=ilike 类似=like,但是忽略大小写
not like 通过%value%不匹配的
not ilike 类似not like,但是忽略大小写
=? 未设置或者等于,未设置表示当值是None或者是False,其余和=一样
in 判断value是否在元素的列表里面
not in 判断value是否不再元素的列表里面
child_of 判断是否value的子录, [(A,‘child_of’,A)]返回true

主要说明一下 child_of:

[('create_uid.company_id','child_of',[user.company_id.id])]

等价于

['|',('create_uid.company_id','=',[user.company_id.id]),('create_uid.company_id.parent_id','=',[user.company_id.id])]

包括字符串,True或False,数字等

在xml中,能取出当前登录用户user对象,你可以取出user.company_id.id等

条件间的逻辑

符号 说明
& 与,表示符号后2个条件同时满足,默认关系,可以省略

| 或,表示后面2条条件满足一个就行 ! 非,将后面一个条件反转,如果是ture,就变成False Odoo是使用了波兰表示法,简单来说,波兰表示法是一种操作符置于操作数前,并且不需要括号仍然能无歧义地解析表达的方法。 #### 波兰表示法的运算顺序 ####

以二元运算为例,从左至右读入表达式,遇到一个操作符后跟随两个操作数时,则计算之,然后将结果作为操作数替换这个操作符和两个操作数;重复此步骤,直至所有操作符处理完毕。

[’|’,’&’,’|’,a,b,c,’&’,d,e]
其中a,b,c,e,f,g分别是不带逻辑运算符的表达式,表达式的运算顺序:

[’|’,’&’,’|’,a,b,c,’&’,d,e]

[’|’,’&’,(a | b),c,’&’,d,e]

[’|’,((a | b) & c),’&’,d,e]

[’|’,((a | b) & c),(d & e)]

[(((a | b) | c) | (d & e))]

反之,如果我们要做到这个效果

A and (B or C) and D and E

先从里面开始,把or提前

A and (or B C) and D and E

把里面的and提前,去掉括号

and A or B C and D E

所以最后的domain可以这样写

A, '|', B, C, D, E

2、domain使用场景

1. 关联字段

(Many2one/One2many/Many2many)过滤出不同的选择结果

account_id = fields.Many2one('account.account', string='Default Debit Account', domain=[('active', '=', False)])

2. 过滤出想要显示的字段

在ir.actions.act_windon中添加Domain,当某个地方调用这个动作时,只显示符合domain条件的记录

<record id="relate_partner_opportunities" model="ir.actions.act_window">
<field name="name">Opportunities</field>
<field name="res_model">crm.lead</field>
<field name="view_mode">kanban,tree,form,graph,calendar</field>
<field name="domain">[('type','=','opportunity')]</field>
<field name="context">{'search_default_partner_id': active_id,'default_type': 'opportunity'
}</field>
<field name="view_id" eval="False"/>
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
</record>

3. 权限过滤

<record id="account_move_comp_rule" model="ir.rule">
<field name="name">Account Entry</field>
<field name="model_id" ref="model_account_move"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>

4. 搜索过滤

 <record id="view_crossovered_budget_search" model="ir.ui.view"><field name="name">crossovered.budget.search</field><field name="model">crossovered.budget</field><field name="arch" type="xml"><search string="Budget"><field name="name" filter_domain="[('name','ilike',self)]" string="Budget"/><field name="date_from"/><field name="date_to"/><filter string="Draft" domain="[('state','=','draft')]" help="Draft Budgets"/><filter string="To Approve" domain="[('state','=','confirm')]" help="To Approve Budgets" /><field name="state"/></search>
</field>
</record>

有什么不正确的,欢迎指正。

odoo domain详解相关推荐

  1. Odoo权限详解一张图

    权限一张图 权限详解文字版 (部分转载并补充) 在Odoo中,使用用户组(res.groups)来管理权限,一个特殊的用户组是 员工/员工(base.group_user) 组,所有的用户都属于这个组 ...

  2. DNS IP DOMAIN 详解

    一.DNS服务概述 DNS是Domain Name System的缩写,即域名系统.其实,DNS是internet的一项服务,一般叫域名服务或者域名解析服务,主要提供网站域名与IP地址的相互转换的服务 ...

  3. 国外虚拟主机域名绑定方法,及Addon Domain/Subdomains/Parked domain详解

    在godaddy上申请的域名 ,使用megabyet.net的虚拟主机,碰到域名绑定的问题,用国内虚拟主机绑定的方法,行不通.差了google总算明白了,以下是我godaddy和megabyet.ne ...

  4. php setcookie(name, value, expires, path, domain, secure) 参数详解

    setcookie() 定义一个和其余的 HTTP 标头一起发送的 cookie.和其它标头一样,cookie 必须在脚本的任何其它输出之前发送(这是协议限制).这需要将本函数的调用放到任何输出之前, ...

  5. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  6. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

  7. [转]HTTP协议详解

    当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...

  8. Mybatis复习笔记3:映射文件详解

    映射文件详解 参数处理(#和$的区别) #{}:可以获取map中的值或者实体对象属性的值: ${}:可以获取map中的值或者实体对象属性的值: select * from person where i ...

  9. ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route

    前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path.之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开 ...

最新文章

  1. pytorch nn.LSTM()参数详解
  2. 你的代码将会被GitHub埋在北极,保存1000年!
  3. Visual Studio 2013编译Mozilla NPAPI 示例注意事项
  4. Script:Speed Up Large Index Create or Rebuild
  5. 使用Lambda表达式重构委托
  6. Hazelcast入门指南第1部分
  7. 诗与远方:无题(六十六)- 清明时节雨纷下
  8. Numpy.where()
  9. 常见Spring异常
  10. 比尔盖茨:反垄断案让我分心,不然微软定能打败安卓
  11. cast函数 oracle 日期_从 Oracle 到 PostgreSQL ,某保险公司迁移实践
  12. 装机人员工具/解决局域网共享
  13. 计算机专业sci二区论文难吗,SCI二区论文发表难度大吗
  14. HTML基础笔记——head标签
  15. 【BZOJ 2054】 疯狂的馒头
  16. 南卡全新NEO系列骨传导耳机,主打轻运动风的南卡NEO测评!!!
  17. 员工认可和奖励的力量
  18. 应届生如何写求职邮件?
  19. 大学毕业学技术学什么好
  20. 自回避随机行走问题 c语言,醉汉随机行走/随机漫步问题(Random Walk Randomized Algorithm Python)...

热门文章

  1. java+ssh+mysql企业设备资产管理系统
  2. 教育叙事计算机学科,信息技术教师教育叙事
  3. 按照指定起始和截止时间分割视频
  4. XSSFWorkbook自由合并单元格并设置单元格样式
  5. Qt编写网络中转服务器(开源)
  6. 手机来电秀怎么开启_360手机卫士怎么设置来电秀
  7. 实现原理 扫描枪_扫描枪的工作原理
  8. win32:超时Timeout和延时Delay的区别
  9. python项目成功打包成exe,运行exe时报错:Unhandled exception in script:Failed to excute
  10. Warning: count(): Parameter must be an array or an object that implements Countable in 是什么意思?