Вложенные транзакции/частичное сохранение моделей django?
Есть метод, который выполняет определнные действия и логирует были ли эти действия завершены, как и кем.
Есть проблема, если во время выполнения действий произошла ошибка — надо все созданные инстансы моделей, кроме логов, удалить — т.е. сделать rollback. Но вместе с rollback'ом удалятся и логи. Как быть в этом случае?
В сейвпоинтах сохраняется вся цепочка моделей измененных? Есть ли возможность вложенных транзакций?
Я попробовал через enter_transaction_management /leave_transaction_management — во время выполнения возник эксепшен, сначала TransactionManagementError(«This code isn't under transaction management»), но его не удалось поймать/подавить, причем я проверял сначала, что is_managed…
Если это логи действий пользователя, то я бы предложил проверять возможную ошибку и восстанавливать предыдущее состояние явно, т. е. не полагаться на инструменты БД. Если же это системные логи, то вряд ли есть смысл вести таковые в БД: например, в эти логи никогда не попадёт ошибка подключения к БД.
Эти логи — логи ssh подключений к удаленным серверам и логи выполнения команд на этих серверах. Их нужно хранить в БД, что бы и пользователь и мы понимали что происходило в какой-то момент и почему что-то «сломалось»,