2012-01-18 11 views
5

Avrei potuto giurare di aver letto prima una domanda, ma non riesco a trovarla, quindi:Come posso eseguire del codice quando viene chiamato per la prima volta il metodo di salvataggio di un modello Django?

In Django, come posso eseguire del codice quando una nuova istanza di modello viene salvata nel database?

So che posso scrivere un metodo personalizzato MyModel().save() per eseguire del codice ogni volta che un'istanza del modello viene salvata. Ma come posso eseguire il codice solo quando un'istanza del modello viene salvata per la prima volta?

risposta

5

documentazione Django stato difficile per me di Grok in un primo momento, ecco un esempio più esplicito

from django.db.models.signals import post_save 
from yourapp.models import YourModel 

def model_created(sender, **kwargs): 
    the_instance = kwargs['instance'] 
    if kwargs['created']: 
     do_some_stuff(the_instance) 

post_save.connect(model_created, sender=YourModel) 
+0

Hmmmm. I segnali non mi sono mai piaciuti molto (azione spettrale a distanza). Inoltre, è peculiare avere due modi molto diversi per farlo: salvare save() a portata di mano e un segnale dall'altro. –

+0

Manca ":" nella definizione model_created – rsm

4

Ah, sì: the post_save signal passa un argomento chiamato created, che è True se la sua istanza è stato creato dalla chiamata a save().

+2

Si può anche verificare se self.pk esiste nel metodo di salvataggio - spesso la scelta che vorrei fare a seconda della complessità . Impostazione di un timestamp prima che auto_now_add esistesse per esempio :) –

Problemi correlati