预期单例: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
.
我有这个错误 预期单例: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
.