odoo domain 的三种方法

简介#

在 odoo 中 domain 无处不在,就是过滤数据用的,备选项,可选项,都是用domain过滤的。

也就是sqlalchemy的filter

 

一:定义在model#

class DemoExpenseTutorial(models.Model):
    _name = 'demo.expense.tutorial'
    ......
    employee_id = fields.Many2one('hr.employee', string="Employee", required=True,
                domain=[('active', '=', True)] )

 

二:定义在view#

复制代码
  <record id="view_form_demo_expense_tutorial" model="ir.ui.view">
    <field name="name">Demo Expense Tutorial Form</field>
    <field name="model">demo.expense.tutorial</field>
    <field name="arch" type="xml">
      <form string="Demo Expense Tutorial">
        ......
            <field name="employee_id" domain="[('user_id', '=', user_id)]"/>
        ......
          </group>
        </sheet>
      </form>
    </field>
  </record>
复制代码

 

 

三:定义在onchang#

复制代码
@api.onchange('user_id')
def onchange_user_id(self):
    # domain
    result = dict()
    result['domain'] = {
        'employee_id': [('user_id', '=', self.user_id.id)]
    }
    # equal
    # self.env['hr.employee'].search([('user_id', '=', self.user_id.id)])
    return result
复制代码

 

四:domain的波兰表示法#

domain的集合是用波兰表示法做的

 

五:特殊运算符 child_of、parent_of#

有时候遇到需要搜索或者筛选出层级关系中,某个节点以后该节点的所有子节点,或者某节点以及该节点的所有父节点的记录时,需要使用odoo的child_of,和parent_of两个筛选条件

使用示例:

self.search([('id', 'child_of', menu_roots.ids)])
domain="[('hr_department_id', 'child_of', parent.department_id)]"
('id', 'parent_of', self.subsystem_id.id)
domain = [('view_location_id', 'parent_of', self.ids)]

对python代码和xml中皆可使用

 

作者:上官飞鸿

出处:https://www.cnblogs.com/jackadam/p/16512912.html

版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。

posted @   上官飞鸿  阅读(1035)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示