[Django] Relationen im post_save noch nicht verfügbar
Verfasst: Dienstag 29. Oktober 2013, 12:59
Hallo Forum,
ich habe hier das Problem, das ich nach dem Speichern eines Objektes direkt eine Aktion ausführen möchte. Das ist an sich kein Problem, bietet Django dafür doch post_save an. Der folgende Code ist gekürzt:
create_due_task() wird also aufgerufen nachdem ein Task gespeichert wurde. Allerdings ist branches darin eine leere Liste, wenn das Objekt gerade neu war und ich es das erste Mal speichere. Auch dann, wenn ich über das Admin-Interface gerade ganz viele branches gesetzt habe.
Wenn es bereits einmal gespeichert wurde, dann ist branches voll mit den Einträgen vor dem aktuellen Speichern.
Entweder läuft das in zwei verschiedenen Transaktionen, und die sehen sich deshalb gegenseitig nicht, oder Django speichert zuerst Task, führt dann post_save aus und speichert dann die ManyToMany-Objekte. Oder ich habe irgendwo einen kräftigen Denkfehler.
ich habe hier das Problem, das ich nach dem Speichern eines Objektes direkt eine Aktion ausführen möchte. Das ist an sich kein Problem, bietet Django dafür doch post_save an. Der folgende Code ist gekürzt:
Code: Alles auswählen
class Task(models.Model):
branches = models.ManyToManyField(Branch,
verbose_name="Abteilung", related_name="crontasks")
def create_due_task(self):
branches = self.branches.all()
def post_save_task(sender, **kwargs):
instance = kwargs["instance"]
instance.create_due_task()
post_save.connect(post_save_task, sender=Task)
Wenn es bereits einmal gespeichert wurde, dann ist branches voll mit den Einträgen vor dem aktuellen Speichern.
Entweder läuft das in zwei verschiedenen Transaktionen, und die sehen sich deshalb gegenseitig nicht, oder Django speichert zuerst Task, führt dann post_save aus und speichert dann die ManyToMany-Objekte. Oder ich habe irgendwo einen kräftigen Denkfehler.