Pawan Kumar Sharma
Pawan Kumar Sharma

Reputation: 1168

RecursionError: maximum recursion depth exceeded in Odoo 13

When I am importing xlsx sheet than getting 'RecursionError: maximum recursion depth exceeded' error. I am using odoo v13. My aim is that when 'log_status' changed to 'Confirmed' state then one assigned method should be called. for this, I am using a write method for calling this method. My python code is below:

    @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

Thanks in advance.

Upvotes: 1

Views: 1221

Answers (1)

Bhavesh Odedra
Bhavesh Odedra

Reputation: 11143

There are few items where you may improve it.

  • Change api.model with api.multi.
  • Inside self.action_confirm() method, you have called write method again, 'log_status' match with 'Confirmed' condition. So it will be recursive.

To avoid it, we can use context to pass dummy flag.

Try with following code:

@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

Upvotes: 6

Related Questions