这是我的计算字段:
half_pension_days_value = fields.Integer(string='Day value', copy=False, compute='convert_bin_dec')
这是我的职能:
@api.multi
def convert_bin_dec(self):
if self.half_pension:
print "Je suis dans la fonction convert"
self.half_pension_days_value = 5
遇到的问题:
由于布尔值half_pension
的状态,一旦启动此功能,我的打印就会开始循环播放。
我想问题出在这一行-> self.half_pension_days_value = 5
。
但是为什么?
编辑: 顺序
@api.model
def create(self, vals):
record = super(ResPartnerSchool, self).create(vals)
record.convert_bin_dec()
return record
@api.multi
def write(self, vals):
result = super(ResPartnerSchool, self).write(vals)
self.convert_bin_dec()
return result
这是我的错误-> RuntimeError:调用Python对象时超出了最大递归深度 谢谢
答案 0 :(得分:1)
您的问题如下:当您执行此操作时,convert_bin_dec()
方法将调用对象的write()
方法:self.half_pension_days_value = 5
和write()
方法将再次调用{{ 1}}方法,因此您可以进行递归调用。
要解决此类问题,您必须使用convert_bin_dec()
装饰器。
尝试一下:
@api.depends
不要忘记在@api.multi
@api.depends('half_pension')
def convert_bin_dec(self):
for record in self:
if record.half_pension:
print "Je suis dans la fonction convert"
record.half_pension_days_value = 5
和self.convert_bin_dec()
方法中删除write()
。
答案 1 :(得分:0)
Henion,
您说过half_pension是您的布尔字段。然后尝试以下代码:
@api.multi
def convert_bin_dec(self):
for rec in self:
if rec.half_pension == True:
print "Je suis dans la fonction convert"
rec.half_pension_days_value = 5
or
您可以中断功能。它限制了多个条目。
@api.multi
def convert_bin_dec(self):
for rec in self:
if rec.half_pension:
print "Je suis dans la fonction convert"
rec.half_pension_days_value = 5
break