Как я использую сигналы Django с абстрактной моделью?

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

Если я соединяю сигнал, указывающий абстрактную модель, это не распространяет к полученным моделям:

pre_delete.connect(clear_cache, sender=MyAbstractModel, weak=False)

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

Где я должен соединить сигнал?

12
задан Conley Owens 22 April 2010 в 16:13
поделиться

2 ответа

Создайте настраиваемый менеджер для своей модели. В методе calculate_to_class он должен установить сигнал для class_prepared . Этот сигнал вызывает функцию, которая связывает больше сигналов с моделью.

4
ответ дан 2 December 2019 в 20:39
поделиться

Я думаю, вы можете подключиться к post_delete без указания отправителя, а затем проверить, есть ли фактический отправитель в списке модели. классы. Что-то вроде:

def my_handler(sender, **kwargs):
    if sender.__class__ in get_models(someapp.models):
        ...

Очевидно, вам понадобится более сложная проверка и т. Д., Но вы поняли идею.

4
ответ дан 2 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: