2012-01-18 15 views
5

Podría haber jurado que había leído una pregunta sobre esto antes, pero no puedo encontrarlo, entonces:¿Cómo puedo ejecutar algún código cuando se llama por primera vez al método de guardado de un modelo de Django?

En Django, ¿cómo puedo ejecutar algún código cuando una nueva instancia de modelo se guarda en la base de datos?

Sé que puedo escribir un método personalizado MyModel().save() para ejecutar algún código cada vez que se guarda una instancia de modelo. Pero, ¿cómo puedo ejecutar código solo cuando se guarda una instancia modelo por primera vez?

Respuesta

5

documentación de Django era difícil para mí asimilo al principio, aquí hay un ejemplo más explícito

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. Nunca me han gustado mucho las señales (acción espeluznante a distancia). Además, es peculiar tener dos formas muy diferentes de hacerlo: anulando save() en la mano y una señal en el otro. –

+0

Falta un ":" en la definición model_created – rsm

4

Ah sí: the post_save signal pasa un argumento llamado created, que es True si su instancia fue creada por la llamada al save().

+2

También puede comprobar si existe self.pk en el método de salvar - a menudo la opción que me gustaría hacer en función de la complejidad . Establecer una marca de tiempo antes de que auto_now_add existiera, por ejemplo :) –

Cuestiones relacionadas