Есть несколько пунктов, где вы можете улучшить его.
- Заменить
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