Как вызвать сигнал Django при использовании flush?

Я использую redis для кэширования данных в моем проекте и удаляю кэш через сигнал. При каждом изменении в моей базе данных сигнал очищает кэш, используя ключ, предоставленный следующим образом

@receiver(post_save, sender=Book)
def cache_clean_books(sender, instance, created, **kwargs):

    if created:
        cache.delete("all_books")
    else:
        cache.delete(f'book_id_{instance.id}')

Отсюда все работает нормально, но когда я использую python manage.py flush для очистки данных из базы данных, мой сигнал не срабатывает. Есть ли способ, который я могу использовать, чтобы сигнал срабатывал всякий раз, когда я очищаю данные в django?

Сигнал post_save здесь не вызывается, поскольку выполнение команды python manage.py flush не действует на экземпляр модели, а просто выполняет SQL для промывки базы данных. Вы можете использовать сигнал post_migrate, если хотите выполнять код всякий раз, когда выполняется команда flush:

from django.db.models.signals import post_migrate


@receiver(post_migrate)
def clear_cache(sender, **kwargs):
    # Clear your cache here
    pass

Примечание: Это также будет выполняться всякий раз, когда вы запускаете миграцию, но я полагаю, что можно с уверенностью предположить, что миграция базы данных должна очистить кэш.

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