【问题标题】:RecursionError: maximum recursion depth exceeded in Odoo 13RecursionError:Odoo 13 中超出了最大递归深度
【发布时间】:2020-02-05 06:45:06
【问题描述】:

当我导入 xlsx 工作表时,出现“RecursionError:超出最大递归深度”错误。我正在使用odoo v13。我的目标是,当“log_status”更改为“已确认”状态时,应该调用一个分配的方法。为此,我使用 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

提前致谢。

【问题讨论】:

    标签: recursion import odoo odoo-13


    【解决方案1】:

    您可以改进的项目很少。

    • api.model 更改为api.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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 2013-12-01
      • 1970-01-01
      • 2017-03-24
      • 2011-12-31
      • 2017-08-09
      相关资源
      最近更新 更多