Odoo V10-计算字段

时间:2018-10-02 10:39:49

标签: python odoo

这是我的计算字段:

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对象时超出了最大递归深度 谢谢

2 个答案:

答案 0 :(得分:1)

您的问题如下:当您执行此操作时,convert_bin_dec()方法将调用对象的write()方法:self.half_pension_days_value = 5write()方法将再次调用{{ 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