Pode django pré_save sinalizador funcionar para todas as classes derivadas
-
26-09-2019 - |
Pergunta
Eu tenho uma "ação" da classe modelo que é estendida por várias outras classes. Eu sou novo no Django e assumi que, se eu chamasse o pre_save.connect (actionfunc, remeter = action), o ActionFunc seria chamado sempre que o método de salvamento na classe de ação foi chamado (inclusive por qualquer classe derivada).
Minha observação é que essa função é acionada apenas quando a instância é uma correspondência direta do tipo de classe definida no remetente. Existe alguma maneira de obter isso para receber sinais para todas as instâncias de ação derivadas também?
Solução
Não, você tem que ligar para o pre_save.connect
Muitas vezes.
No entanto, você pode usar o Python para obter todas as classes que estendem a classe de seu interesse e percorrem a instrução pré_save Connect.
Diga, se as classes estendidas do Action
estão todos em um determinado arquivo, você pode fazer o seguinte:
global_dict = globals().copy()
[el for el in global_dict.values() if getattr(el,'__base__',None)==Action]
Outras dicas
Uma coisa que você pode fazer é modificar o remetente de sinal em django para que, em vez de corresponder a um tipo específico, em vez
if isinstance(sender, filter):
send_signal()
(pseudo-código)