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

Odoo 10 XML域过滤问题:用户关联经营单元的产品筛选失效

问题分析与解决方案

你遇到的问题核心是视图域的动态表达式写法错误,导致Odoo无法正确解析你想要的用户关联经营单元ID列表,反而把字符串当成了过滤值,所以所有产品都被过滤掉了。下面具体拆解错误点和修正方法:

错误原因拆解

  1. 错误的字符串引用:你把user_id.operating_unit_ids.ids用引号括起来了,这会让Odoo把它当成一个静态字符串值,而不是动态计算的用户关联经营单元ID列表。显然没有产品的operating_unit_id会等于这个字符串,所以全部被过滤。
  2. 错误的用户对象引用:user_id指的是当前记录(比如你正在编辑的单据)上的用户字段,而不是当前登录的系统用户。要获取当前登录用户的关联数据,应该用user这个内置变量。

正确的域写法

把你的域表达式改成下面这样:

<field name="product_id" domain="[('operating_unit_id','in', user.operating_unit_ids.ids)]"/>

为什么这样能工作?

  • user是Odoo视图域中内置的变量,直接指向当前登录的res.users对象;
  • user.operating_unit_ids.ids会自动计算出当前用户关联的所有经营单元ID列表,符合in操作符对“可迭代ID集合”的要求;
  • 去掉引号后,Odoo会动态解析这个表达式,而不是把它当成静态值。

额外补充场景

如果需要处理用户未关联任何经营单元的情况(比如管理员),可以添加一个OR条件,允许显示所有产品或者无经营单元的产品,示例如下:

<field name="product_id" domain="[('operating_unit_id','in', user.operating_unit_ids.ids), '|', ('operating_unit_id', '=', False), (user.operating_unit_ids, '=', False)]"/>

这个域的逻辑是:显示用户关联经营单元下的产品,或者无经营单元的产品,或者用户未关联任何经营单元时显示所有产品。

内容的提问来源于stack exchange,提问作者NinjaBat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:37:25