如何在Many2one filed中使用Domain filter:查看child_id及限定用户可见范围
问题1:如何通过Domain Filter在Many2one字段中查看child_id?
假设你的Many2one字段关联的是res.user模型(毕竟child_id通常指用户的子用户),实现这个需求很简单,只需要给字段添加动态Domain来过滤出当前登录用户的子用户即可。
方式1:在Python字段定义中配置
直接用lambda函数动态获取当前用户的子用户ID列表:
user_id = fields.Many2one( 'res.user', string="选择用户", domain=lambda self: [('id', 'in', self.env.user.child_ids.ids)] )
这样配置后,Many2one的下拉框就只会显示当前用户的所有子用户。
方式2:在XML视图中配置
如果不想修改Python代码,也可以直接在视图里设置Domain:
<field name="user_id" domain="[('id', 'in', user.child_ids.ids)]"/>
Odoo视图上下文里可以直接访问user对象,所以这个写法能直接生效。
问题2:是否可以在Many2one字段中配置Domain Filter,使其仅显示当前user_id及其子用户?
当然可以! 只需要把当前用户自己的ID也加入到过滤的ID列表里就行,具体实现如下:
方式1:Python字段定义
user_id = fields.Many2one( 'res.user', string="选择用户", domain=lambda self: [('id', 'in', [self.env.user.id] + self.env.user.child_ids.ids)] )
这里把当前用户ID和子用户的ID列表合并,下拉框就会同时显示当前用户自己和他的所有子用户。
方式2:XML视图配置
同样,在视图里也能直接实现:
<field name="user_id" domain="[('id', 'in', [user.id] + user.child_ids.ids)]"/>
小提示
如果当前用户没有子用户,那么第一个需求的下拉框会是空的,而第二个需求的下拉框就只会显示当前用户自己;如果你的child_id关联的是其他自定义模型,只需要把代码里的res.user和child_ids替换成对应的模型和字段就行,核心逻辑是一致的。
内容的提问来源于stack exchange,提问作者NinjaBat
相关产品推荐
相关产品推荐

