Экземпляр Django post_delete все еще присутствует в базе данных
Одним из ключевых аргументов в post_delete является instance, который является реальным удаляемым экземпляром.
Согласно документации django - Обратите внимание, что объект больше не будет находиться в базе данных, поэтому будьте очень осторожны, что вы делаете с этим экземпляром.
Я тестирую следующий код ->
@receiver(post_delete, sender=Dummy)
def post_delete_callback(**kwargs):
print('inside post_delete ----------')
instance = kwargs.get('instance')
raise Exception('Exception from the post delete receiver')
Но даже после исключения объект должен быть удален в базе данных, но я получаю исключение, а также объект не удаляется из базы данных.
В случае сигнала pre_delete это оправдано, но как быть с сигналом post_save? Я что-то упускаю?
Процесс удаления выполняется в блоке atomic
- что означает, что либо он будет выполнен успешно, либо вернется к предыдущему состоянию.
В вашем случае черное Exception
создает блокировку потока выполнения, и DB/Django возвращает действие (т.е. действие удаления) в исходное состояние. Это приводит к тому, что объекты все еще не удалены в БД.
Если вы удалите оператор Exception
из вашего сигнала, вы больше не увидите объект в базе данных.