RecursionError: максимальная глубина рекурсии превышена в Odoo 13 - PullRequest
1 голос
/ 05 февраля 2020

Когда я импортирую лист xlsx, возникает ошибка «RecursionError: максимальная глубина рекурсии превышена». Я использую odoo v13. Моя цель заключается в том, чтобы при изменении состояния log_status в состояние «Подтверждено» должен быть вызван один назначенный метод. для этого я использую метод записи для вызова этого метода. Мой 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

Заранее спасибо.

1 Ответ

6 голосов
/ 05 февраля 2020

Есть несколько пунктов, где вы можете улучшить его.

  • Заменить api.model на api.multi.
  • Внутри self.action_confirm() метода, вы снова вызвали метод write, 'log_status' соответствует условию 'Подтверждено'. Так что это будет рекурсивно.

Чтобы избежать этого, мы можем использовать 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
...