2012-05-20 8 views
33

Ich muss einige Hintergrund Nachbearbeitung auf neu erstellte Objekte in Django tun. Diese Nachbearbeitung sollte nur für neue Objekte ausgeführt werden, nicht für Objekte, die gerade aktualisiert werden.Django: Wie kann ich feststellen, ob das post_save-Signal auf ein neues Objekt triggert?

Ich weiß, dass ich in pre_save überprüfen kann, ob das Objekt eine ID hat, wenn es nicht ist, dann ist es ein neues Objekt. Aber das Problem ist, dass ich in der Nachbearbeitung auf die ID zugreifen muss (damit ich die Ergebnisse in der Datenbank speichern kann).

Wie kann ich das sauber machen?

+2

Ist es überhaupt möglich, die Verarbeitung nach dem eigentlichen zu tun sparen? Dann benutze post_save, https://docs.djangoproject.com/de/dev/ref/signals/#django.db.models.signals.post_save. Es hat einen booleschen Wert, ob es neu oder nur ein Update ist. – andersem

Antwort

10

Wie Docs angegeben und @seler wies darauf hin, aber mit einem Beispiel:

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) 
Verwandte Themen