当前位置: 首页 > news >正文

Odoo domain写法及运用

Domain的写法

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

字段名

如果是Many2one/Many2Many/One2many字段,可以通过'.'取出对应的属性,如:

('routing_id.operation_ids.workcenter_id','=', active_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的子记录

示例:

('company_id','child_of',[user.company_id.id])
('company_level','not in',('common_company'))

有一个要注意的地方,'in'可以反向表示,比如:

('user_ids', 'in', user.id)

应用场景是当一个model中的字段是user_ids = field.Many2many('res.users'),我们可以将这个model的权限赋给这些用户,只有这些用户可以访问

<record id="mrp_dashboard_rule" model="ir.rule">
     <field name="name">mrp_dashboard_rule</field>
     <field name="model_id" ref="model_mrp_workcenter"/>
     <field name="global" eval="True"/>
     <field name="domain_force">[('user_ids', 'in', user.id)]</field>
</record>

包括字符串,True或False,数字等
在xml中,能取出当前登录用户user对象,你可以取出user.id,user.company_id.id等

条件间的逻辑前缀

符号说明
&'AND'或者'与',表示后面2个条件同时满足。默认关系,可以省略
|'OR'或者'或',表示后面2个条件满足一个就行
'NOT'或者'非',将后面一个条件反转,如果是True,就变成False

示例:

[('name', '=', 'Allen'), '|', ('language.code', '!=', 'en_US'), ('company_id', '=', user.company_id.id)]

Domain的使用场景

1.关联字段

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

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

如上:只有当account.account中字段deprecated=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>

Domain的使用场景还有许多,我就不一一列举了。
Domain的介绍就到此结束了,有什么问题,请大家多多指教。

相关文章:

  • jQuery学习小结
  • 重塑旅游业的颠覆者:虚拟现实技术和人工智能
  • IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
  • Confluence 6 升级自定义的站点和空间应用你的自定义布局
  • php对字符串的操作
  • js,H5本地存储
  • 关于Linux的交叉编译环境配置中的问题
  • 感知机和神经网络
  • 团队作业6——展示博客(alpha阶段)
  • 关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决...
  • Api接口开发实例
  • 填坑app:compileDebugJavaWithJavac
  • [洛谷1156]垃圾陷阱(DP)
  • 微信小程序扫码接口,wx.scanCode(OBJECT)
  • zabbix安装后提示:Zabbix server is not running
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CSS魔法堂:Absolute Positioning就这个样
  • ES2017异步函数现已正式可用
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Logstash 参考指南(目录)
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • MYSQL 的 IF 函数
  • PV统计优化设计
  • python docx文档转html页面
  • SwizzleMethod 黑魔法
  • XML已死 ?
  • 闭包,sync使用细节
  • 漂亮刷新控件-iOS
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 携程小程序初体验
  • 学习笔记TF060:图像语音结合,看图说话
  • 走向全栈之MongoDB的使用
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (6)设计一个TimeMap
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (利用IDEA+Maven)定制属于自己的jar包
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三) diretfbrc详解
  • (万字长文)Spring的核心知识尽揽其中
  • .aanva
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET 反射 Reflect
  • .NET 设计模式初探
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @javax.ws.rs Webservice注解
  • [2016.7.Test1] T1 三进制异或