Экземпляр 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 из вашего сигнала, вы больше не увидите объект в базе данных.

Вернуться на верх