You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:39:07