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

能否基于同模型计算字段定义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是模型中与员工直接关联的实际字段,用反向域逻辑替代计算字段的作用。

  • 新增标记字段间接实现
    先在模型中添加一个用于权限判断的计算字段,再在记录规则里引用该字段:

    1. 模型中新增布尔型计算字段:
      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
      
    2. 记录规则中引用该字段:
      <field name="domain_force">[('is_allowed', '=', True)]</field>
      

    注意要确保计算逻辑准确,复杂场景下需考虑性能损耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:12:05