Sto utilizzando il segnale post_save di django per eseguire alcune istruzioni dopo aver salvato il modello.Identifica i campi modificati nel segnale post_save django
class Mode(models.Model):
name = models.CharField(max_length=5)
mode = models.BooleanField()
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Mode)
def post_save(sender, instance, created, **kwargs):
# do some stuff
pass
Ora voglio eseguire un'istruzione a seconda che il valore del campo mode
è cambiato o meno.
@receiver(post_save, sender=Mode)
def post_save(sender, instance, created, **kwargs):
# if value of `mode` has changed:
# then do this
# else:
# do that
pass
Ho esaminato alcuni thread SOF e un blog ma non sono riuscito a trovare una soluzione. Tutti cercavano di utilizzare il metodo pre_save o il modulo che non sono il mio caso d'uso. https://docs.djangoproject.com/es/1.9/ref/signals/#post-save nei documenti django non menziona un modo diretto per farlo.
Una risposta nel collegamento qui sotto sembra promettente ma non so come usarla. Non sono sicuro se l'ultima versione di django lo supporta o meno, perché ho usato il ipdb
per eseguire il debug di questo e ho scoperto che la variabile instance
non ha alcun attributo has_changed
come indicato nella risposta seguente.
Django: When saving, how can you check if a field has changed?
Attenzione. Questo approccio ha degli svantaggi, come discusso a lungo [qui] (http://stackoverflow.com/questions/1355150). In poche parole: non è a prova di gara, e può anche essere sbagliato se hai due istanze python che puntano alla stessa riga db. –