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.id,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详解的更多相关文章
- (15)odoo配置文件详解
		openerp-server.conf ---------------- [options]; addons模块的查找路径addons_path = E:\GreenOdoo8.0\source\op ... 
- odoo配置文件详解
		addons模块的查找路径 addons_path = D:\odoo\Odoo 10.0\server\odoo\addons 超级管理员(用于创建,还原和备份数据库的操作) admin_passw ... 
- Odoo仪表盘详解
		转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826324.html 一:仪表盘与看板的区别 kanban:kanban是一种视图类型,卡片式视图.可以为 ... 
- Odoo Controller详解
		转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826241.html 一:Controller 一般通过继承的形式来创建controller类,继承自od ... 
- odoo项目结构参数属性详解
		1.基础文件及目录结构 在认识odoo ORM框架前,先介绍一下odoo中模块目录结构. data:存放模块预制数据i18n:存放国际化文件models:存放模型等py代码security:存放权 ... 
- php setcookie(name, value, expires, path, domain, secure) 参数详解
		setcookie() 定义一个和其余的 HTTP 标头一起发送的 cookie.和其它标头一样,cookie 必须在脚本的任何其它输出之前发送(这是协议限制).这 需要将本函数的调用放到任何输出之前 ... 
- 领域驱动设计(Domain Driven Design)参考架构详解
		摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的Infrast ... 
- odoo配置文件内容详解
		odoo常用openerp-server.conf配置参数详解 参数 说明 用法 addons_path addons模块的查找路径,多个路径用逗号分隔 addons_path = E:\GreenO ... 
- [转载]领域驱动设计(Domain Driven Design)参考架构详解
		摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的Infrast ... 
随机推荐
- [Swift]二分法的两种方式
			★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ... 
- 【转】@Controller和@RestController的区别
			知识点:@RestController注解相当于@ResponseBody + @Controller合在一起的作用. 1) 如果只是使用@RestController注解Controller,则Co ... 
- JAVA POI的使用
			最近开发遇到了要通过Java处理Excel文件的场景,于是乎在网上了解了一番,最后自己做了个demo,已上传gitee:https://gitee.com/github-26930945/JavaCo ... 
- Java多线程(八) synchronized 抛出异常锁自动解除
			当一个线程执行的代码出现异常时,其所持有的锁会自动释放 public class MyObject { private int i = 1; synchronized public void meth ... 
- 题解报告:poj 1426 Find The Multiple(bfs、dfs)
			Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ... 
- 题解报告:hdu 2588 GCD(欧拉函数)
			Description The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written ... 
- G - And Then There Was One (约瑟夫环变形)
			Description Let’s play a stone removing game. Initially, n stones are arranged on a circle and numbe ... 
- 自定义View(10)*onSizeChanged,onMeasure,onDraw的注意事项及正确写法
			1,onSizeChanged 触发: 当view的第一次分配大小或以后大小改变时的产生的事件. 工作: 计算绘制内容的位置,面积等相关值.避免每次在onDraw中计算了. 注意: 计算时不要忘记pa ... 
- Android 性能优化(7)网络优化( 3) Optimizing User-Initiated Network Use
			Optimizing User-Initiated Network Use This lesson teaches you to Pre-fetch Network Data Check for Co ... 
- python获取主机名和用户名
			import socketimport getpassuser_name = getpass.getuser() # 获取当前用户名hostname = socket.gethostname() # ... 
