odoo:domain域表达式的常用方法

1.Domain的写法

Domain是一个元组,由3个元素组成 [('字段名',  '操作符', 值)]

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

操作符
(1)操作符说明


主要说明一下 child_of:比如你要筛选的字段many2one:department_id关联到一个带层级的模型,比如说公司的部门:公司下面有研发部,研发部下面有前端部门,后端部门, 你[('department_id','child_of','研发部id')]就能拿到前端部门和后端部门,parent_of反之。一个找子级,一个找父级

例如:[('department_id', 'child_of', user.department_id.id)],可以找到user.department_id.id下面所有的子部门

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

(2)条件间逻辑运算符说明

Odoo是使用了波兰表示法,操作符置于操作数前,并且不需要括号仍然能无歧义地解析表达的方法。如A,B,C,D=[(‘字段名’,‘操作符’,值)],代表一个表达式

<field name="domain">(A,'|',B,C,D)</field>

#运算效果:A and (B or C)and D
#波兰表示法:A  and ( or  B  C)and D

在xml中要进行转义,如下表。

>:&gt;

<:&lt;

":&quot;

':&apos;

&:&amp;

值(value)
包括字符串,True或False,数字等

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

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>
 找父级部门记录
<record id="work_plan.group_parent_department_read_rule" model="ir.rule">
<!--规则的说明-->
    <field name="name">父级部门记录读权限</field>
<!--规则适用的模型-->
    <field name="model_id" ref="model_work_plan"/>
<!--设置轻松访问记录规则的全局状态-->
     <field name="global" eval="False"/>
<!--设置从属关联,授予访问权限的res.groups。为空表示授予每个用户(非员工,例如门户或公共用户)-->
     <field name="groups" eval="[(4,ref('work_plan.group_base'))]"/>
<!--条件筛选,如果域与记录匹配,则该规则允许所选操作,否则禁止-->
     <field name="domain_force">[('department_id', 'parent_of', user.department_id.id)]</field>
      <field name="perm_read" eval="1"/>
      <field name="perm_write" eval="0"/>
      <field name="perm_create" eval="1"/>
      <field name="perm_unlink" eval="0"/>
        </record>
<!--    用户可以查看子级部门的工作计划记录-->
        <record id="work_plan.group_child_department_read_rule" model="ir.rule">
            <field name="name">子级部门记录读权限</field>
            <field name="model_id" ref="model_work_plan"/>
            <field name="groups" eval="[(4,ref('work_plan.group_base'))]"/>
            <field name="domain_force">[('department_id','child_of',user.department_id.id)]</field>
            <field name="perm_read" eval="1"/>
            <field name="perm_write" eval="0"/>
            <field name="perm_create" eval="1"/>
            <field name="perm_unlink" eval="0"/>
        </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>

参考文章:https://blog.csdn.net/m0_37826101/article/details/100133882

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值