У меня есть абстрактная модель, которая сохраняет дисковый кэш. Когда я удаляю модель, мне нужна она для удаления кэша. Я хочу, чтобы это произошло для каждой полученной модели также.
Если я соединяю сигнал, указывающий абстрактную модель, это не распространяет к полученным моделям:
pre_delete.connect(clear_cache, sender=MyAbstractModel, weak=False)
Если я пытаюсь соединить сигнал в init, где я могу получить имя производного класса, он работает, но я боюсь, что он попытается очистить кэш так же много раз, как я инициализировал полученную модель, не только однажды.
Где я должен соединить сигнал?
Создайте настраиваемый менеджер для своей модели. В методе calculate_to_class
он должен установить сигнал для class_prepared
. Этот сигнал вызывает функцию, которая связывает больше сигналов с моделью.
Я думаю, вы можете подключиться к post_delete без указания отправителя, а затем проверить, есть ли фактический отправитель в списке модели. классы. Что-то вроде:
def my_handler(sender, **kwargs):
if sender.__class__ in get_models(someapp.models):
...
Очевидно, вам понадобится более сложная проверка и т. Д., Но вы поняли идею.