预期单例:salesman.period.kpi.line

Expected singleton: salesman.period.kpi.line

我有这个错误 预期单例:salesman.period.kpi.line

这是我的py文件

class KpiLine(models.Model):
    _name='salesman.period.kpi.line'
    kpi_by_hr = fields.Float('KPI By Header')
    check_field_line = fields.Boolean('Check', compute='get_user_line')
    
    def get_user_line(self):
        for line in self:
            if self.env.user == line.kpi_id.user_id:
                self.check_field_line = False
            else:
                self.check_field_line = True

这是我的xml

<field name="kpi_by_hr" attrs="{'readonly': [('check_field_line', '!=', True)]}" />

我的目标是让 kpi_by_hr 只在创建者打开文档时只读,而不是其他人

您已经在 self 上循环以获取 line 作为 Singleton。因此,将您的值分配给 line 而不是 self

# wrong
self.check_field_line = False
# right
line.check_field_line = False

self 可以而且大多数情况下将是计算方法调用中的多记录集,并且在 Odoo 15 之前没有办法将值分配给多记录集的字段,不使用 update()write()。但是两者都不应该在计算方法中使用。

编辑:尽量遵循 Odoo 的命名准则并在其计算字段之后命名计算方法(如果不计算多个字段):_compute_check_field_line.