odoo14, 搜索视图默认添加当前用户的部门查询条件
-
@mzj
我估计你已经知道我们可以在act_window
的context
上设置默认的过滤条件的方法:<record id="xml_id" model="ir.actions.act_window"> <field name="context">{'search_default_filter_name': 1}</field> </record>
根据你需要按当前用户所属部门来过滤记录的要求,我们可以首先在对象的Search View中定义对应的搜索条件 (前提是你已安装了HR模块,或者已经继承
res.users
对象并在其上添加了department_id
):<filter string="PR from my department" domain="[('department_id.member_ids.user_id', 'in', [uid])]" name="my_department_filter"/>
注意我们给这个过滤条件设定的名字
my_department_filter
, 然后把这个过滤条件用到之前提到的window action的context里就是:<record id="xml_id" model="ir.actions.act_window"> <field name="context">{'search_default_my_department_filter': 1}</field> </record>
这是默认过滤条件的基本配置方法。使用过滤条件的好处是比较灵活,用户也可以选择关闭此过滤条件。如果需要获得强制性的过滤结果(即让用户无法关闭),在Odoo中可以有多个手段,比如action上的domain,设置“记录规则”或者覆写“search”方法等等
-
@mzj
我估计你已经知道我们可以在act_window
的context
上设置默认的过滤条件的方法:<record id="xml_id" model="ir.actions.act_window"> <field name="context">{'search_default_filter_name': 1}</field> </record>
根据你需要按当前用户所属部门来过滤记录的要求,我们可以首先在对象的Search View中定义对应的搜索条件 (前提是你已安装了HR模块,或者已经继承
res.users
对象并在其上添加了department_id
):<filter string="PR from my department" domain="[('department_id.member_ids.user_id', 'in', [uid])]" name="my_department_filter"/>
注意我们给这个过滤条件设定的名字
my_department_filter
, 然后把这个过滤条件用到之前提到的window action的context里就是:<record id="xml_id" model="ir.actions.act_window"> <field name="context">{'search_default_my_department_filter': 1}</field> </record>
这是默认过滤条件的基本配置方法。使用过滤条件的好处是比较灵活,用户也可以选择关闭此过滤条件。如果需要获得强制性的过滤结果(即让用户无法关闭),在Odoo中可以有多个手段,比如action上的domain,设置“记录规则”或者覆写“search”方法等等
-
@digitalsatori 谢谢您提供的解决办法, 可是我在实现时遇到这样一个问题, hr模块里面有继承res.users 模型 也有关联department, 于是我就用hr模块里的department_id 去写 过滤条件:
<filter string="我的部门" domain="[('department_id', '=',user.department_id)]" name="my_department_filter"/>
出现这样的错误:
Invalid composed field user.department_id in domain of <filter name="my_department"> ([('requested_by_department','=', user.department_id)])
hr 模块里面有关字段是这样的
employee_ids = fields.One2many('hr.employee', 'user_id', string='Related employee') employee_id = fields.Many2one('hr.employee', string="Company employee", compute='_compute_company_employee', search='_search_company_employee', store=False) department_id = fields.Many2one(related='employee_id.department_id', readonly=False, related_sudo=False)
我想问一下, 搜索视图里面 user 不可以使用没有在数据库当中保存的属性(字段)吗
-
@digitalsatori 已经试过了, 这种方式是可行的! 非常感谢您的帮助!!!
-
one2many后面还可以直接引用many2one字段,竟然还能执行出结果,真是神奇的魔法。到底表达式左边返回的是列表还是单值呢?
如果左边是单值
in是双向的,uid是不是不用转为列表?
-
@wjfonhand 你说的对: “in 是双向的”。 左边返回的是列表,右边的uid不转为列表也可以的。