能否基于同模型计算字段定义Odoo记录规则的domain_force?
问题
能否基于同一模型的计算字段定义记录规则的domain_force?示例如下:
<field name="domain_force">[('employee_id','in',employee_ids.ids)]</field>
其中,employee_id和employee_ids(计算字段)均为该模型的字段。
Odoo返回如下错误:
Invalid domain: <class 'NameError'>: "name 'employee_ids' is not defined"
尝试过object.employee_ids、obj.employee_ids、self.employee_ids等写法,但均无效,该如何实现需求?
解决方案
Odoo记录规则的domain_force在解析阶段无法直接引用当前模型的计算字段——因为规则执行上下文里没有当前记录的实例对象,只能使用预定义上下文变量(如user),或通过关联关系反向推导逻辑。
以下是两种可行的实现方式:
反向关联替代计算字段逻辑
如果employee_ids的计算逻辑基于模型的某个关联字段,直接在domain里用反向查询替代。比如employee_ids是当前记录关联的员工集合,可改写为:<field name="domain_force">[('employee_id', 'in', [('your_relation_field', '=', id)])]</field>这里的
your_relation_field是模型中与员工直接关联的实际字段,用反向域逻辑替代计算字段的作用。新增标记字段间接实现
先在模型中添加一个用于权限判断的计算字段,再在记录规则里引用该字段:- 模型中新增布尔型计算字段:
is_allowed = fields.Boolean(compute='_compute_is_allowed') def _compute_is_allowed(self): for rec in self: rec.is_allowed = rec.employee_id in rec.employee_ids - 记录规则中引用该字段:
<field name="domain_force">[('is_allowed', '=', True)]</field>
注意要确保计算逻辑准确,复杂场景下需考虑性能损耗。
- 模型中新增布尔型计算字段:
内容的提问来源于stack exchange,提问作者Seaworn
相关产品推荐
相关产品推荐

