【转载】odoo技术开发白皮书 第二部分 第八章 Domain 过滤

转载:http://book.odoomommy.com/chapter2/README11.html

第十一章 Domain

Domain的使用场景

Domian使用的场景非常多,比如:

  • search方法中的domian过滤条件
  • 视图中的过滤条件
  • 视图属性中的过滤条件
  • 过滤规则中的过滤条件

不同的场景下的过滤条件略有不同。

视图中的domain

uid: 当前用户的UID

视图中的domain只支持简单类型的值,比如,字符、整形、浮点型等。也就是说,不支持通过属性方式的引用:

<field name="out_location" position="before">
    <field name="current_user" invisible="0"/>
</field>
<field name="out_location" position="attributes">
    <attribute name="domain">[('usage','=','internal'),('id','=',current_user.id)]</attribute>
</field>

current_user字段是当前登录的用户,像上面这种方式,就会提示错误:

如果有计算的需求,这里的建议是新建一个compute的字段,将计算后的值赋给新字段。比如上面的例子可以写为:

<field name="out_location" position="before">
    <field name="current_user_id" invisible="1"/>
</field>
<field name="out_location" position="attributes">
    <attribute name="domain">[('usage','=','internal'),('id','=',current_user_id)]</attribute>
</field>

窗口动作中的domain

通常我们给菜单设置过滤,是通过给菜单绑定的动作设置domain来完成的,这里的domain写法跟其他的domain写法并无不同。只是在某些特定的情况下,我们需要使用一些特殊的技巧:

domain中需要使用ref的情况

如果我们像常规的方式:

<field name="domain">[('abc','=',ref('xxx.xxx'))]</field>

系统会提示ref不可用,这个时候我们就需要变通一下,使用eval函数将其转换为如下的形式:

<field name="domain" eval="[('abc','=',ref('xxx.xxx'))]"</field>

过滤规则中的domain

可以直接使用的变量:

user: 当前登录的用户

操作符

Odoo中受支持的操作符有:!(否定),|(或),&(且)。这三个用于domain的连接。另外还有诸如:'=', '!=', '<=', '<', '>', '>=', '=?', '=like', '=ilike', 'like', 'not like', 'ilike', 'not ilike', 'in', 'not in', 'child_of' 用于domain内部的条件判定。

  • like: 大小写敏感的 %%。例如:[('input', 'like', 'open')],可以匹配 open, opensource, openerp, Odooopenerp
  • not like: 大小写敏感的不匹配操作符。
  • =like: 大小写敏感的全匹配 例如:[('input','=like','open')],只能匹配open
  • ilike: 大小写不敏感的半匹配,例如 [('name', 'ilike', 'open')] 能匹配 Openerp, openerp, Opensource, opensource, Open, open, Odooopenerp, OdooOpenerp
  • not ilike: 大小写不敏感的不匹配
  • =ilike: 大小写不敏感的全匹配,[('name', '=ilike', 'open')]可以匹配 Open和open
  • =?: 意思是如果某个过滤条件返回的结果是None或False则以True替代。例如: name = 'odoo' parent_id = False [('name', 'like', name), ('parent_id', '=?', parent_id)],将返回name的domain过滤结果&True。如果过滤条件是 name = 'odoo' parent_id = 'openerp' [('name', 'like', name), ('parent_id', '=?', parent_id)] 则将返回两个过滤条件的且的结果。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值