Allego un metodo al segnale post_save del mio modello Django. In questo modo posso cancellare alcuni elementi della cache ogni volta che il modello viene modificato.Perché il post_save viene sollevato due volte durante il salvataggio di un modello Django?
Il problema che sto avendo è che il segnale viene attivato due volte quando il modello viene salvato. Non fa necessariamente male a nulla (il codice verrà semplicemente cancellato con grazia) ma non può essere corretto.
Un esempio veloce, basta stampare il modello per la console (utilizzando il server dev):
from blog.models import Post
from django.db.models import signals
def purge_cache(sender, **kwargs):
print 'Purging %s' % sender
signals.post_save.connect(purge_cache, sender=Post)
Questo sta usando la stabile 1.1.1 rilascio di Django.
informazioni aggiornate:
Con feedback da parte i commenti di tutti, ho modificato la mia domanda perché la questione è ora scoprendo il motivo per cui il post_save viene attivato due volte. La mia ipotesi al momento è che il mio codice models.py viene importato due volte e che il post_save viene collegato più volte.
Quale sarebbe il modo migliore per capire perché viene importato/eseguito due volte?
Se commentare la linea 'post_delete' Connect, è il segnale' post_save' sollevato due volte? – Desintegr
guardando il codice django e in realtà non invia in save(), sei sicuro di ricevere il segnale post_delete e non post_save due volte? –
@Desintegr - Non posso provarlo al momento ma è una buona idea.Ci proverò stasera e aggiornerò la domanda. Se si verifica ancora dopo aver rimosso post_delete, cambierò la mia domanda in "Perché il segnale post_save viene generato due volte?" :) Forse il codice models.py viene eseguito due volte e il segnale viene collegato più volte? –