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?

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top