2012-05-20 12 views
33

Necesito hacer un poco de post-procesamiento de fondo en los objetos recién creados en Django. Este postproceso solo debe ejecutarse en objetos nuevos, no en objetos que se acaban de actualizar.Django: ¿cómo puedo saber si la señal post_save se activa en un nuevo objeto?

Sé que en pre_save puedo verificar si el objeto tiene una identificación, si no tiene, entonces es un objeto nuevo. Pero el problema es que en el postprocesamiento necesito acceder a la identificación (para poder guardar los resultados en la base de datos).

¿Cómo puedo hacer esto de una manera limpia?

+2

¿Es posible en absoluto para hacer el procesamiento después de que el real ahorrar? Luego use post_save, https://docs.djangoproject.com/en/dev/ref/signals/#django.db.models.signals.post_save. Tiene un booleano para decir si es nuevo o solo una actualización. – andersem

Respuesta

10

Como declaró Docs y @seler señaló, pero con un ejemplo:

def keep_track_save(sender, instance, created, **kwargs): 
    action = 'save' if created else 'update' 
    save_duplicate((instance.id, instance.__class__.__name__, action)) 

post_save.connect(keep_track_save, sender=Group) 
Cuestiones relacionadas