RecursionError:在 Odoo 13 中超出了最大递归深度

PAW*_*RMA 1 import recursion odoo odoo-13

当我导入 xlsx 表时,出现“RecursionError:超出最大递归深度”错误。我正在使用odoo v13。我的目标是,当“log_status”变为“Confirmed”状态时,应该调用一个指定的方法。为此,我使用 write 方法来调用此方法。我的python代码如下:

    @api.model
    def write(self, vals):
        record = super(Transaction_log, self).write(vals)
        if 'log_status' in vals and vals.get('log_status') == 'Confirmed':
            self.action_confirm()
        return record


    def action_confirm(self):
        self.write({'log_status': 'Confirmed'})
        self.action_performed.create({'log_status': 'Confirmed', 'trans_log': self.id,
                                      'performed_by': self.env.user.id, 'performed_time': datetime.now()})
        return True
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Bha*_*dra 6

您可以改进它的项目很少。

  • 改变api.modelapi.multi
  • self.action_confirm()方法内部,您再次调用了 write 方法,'log_status' 与 'Confirmed' 条件匹配。所以它将是递归的。

为了避免它,我们可以使用context传递虚拟标志。

尝试使用以下代码:

@api.multi
def write(self, vals):
    record = super(Transaction_log, self).write(vals)
    if 'log_status' in vals and vals.get('log_status') == 'Confirmed' and not self._context.get('by_pass_log_status'):
        self.action_confirm()
    return record

@api.multi
def action_confirm(self):
    self.with_context('by_pass_log_status').write({'log_status': 'Confirmed'})
    self.action_performed.create({'log_status': 'Confirmed', 'trans_log': self.id,
                                  'performed_by': self.env.user.id, 'performed_time': datetime.now()})
    return True
Run Code Online (Sandbox Code Playgroud)