Odoo 10 XML域过滤问题:用户关联经营单元的产品筛选失效
问题分析与解决方案
你遇到的问题核心是视图域的动态表达式写法错误,导致Odoo无法正确解析你想要的用户关联经营单元ID列表,反而把字符串当成了过滤值,所以所有产品都被过滤掉了。下面具体拆解错误点和修正方法:
错误原因拆解
- 错误的字符串引用:你把
user_id.operating_unit_ids.ids用引号括起来了,这会让Odoo把它当成一个静态字符串值,而不是动态计算的用户关联经营单元ID列表。显然没有产品的operating_unit_id会等于这个字符串,所以全部被过滤。 - 错误的用户对象引用:
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
相关产品推荐
相关产品推荐

