Odoo V10 - 计算字段

Odoo V10 - Calculated field

这是我的计算字段:

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

海尼翁,

你说 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 您可以打破 function.it 多次输入的限制。

@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

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

不要忘记删除 write()create() 方法中的 self.convert_bin_dec()