2010-03-01 16 views
7

Ist es möglich, dass Django Formsets automatisch löscht, die in der Anforderung nicht vorhanden sind?Inline-Formsets in Django dynamisch löschen

Also zum Beispiel, wenn ich drei inline Formsets in HTML dargestellt hatte, wenn ich meine Bearbeitungsseite geladen habe und ich benutze Javascript, um zwei von denen zu entfernen, wenn die Anfrage verarbeitet wird Django sieht, dass diese beiden Formulare nicht mehr ihre sind und löscht sie.

Antwort

8

Ja, es ist möglich, ein paar verschiedene Methoden zu verwenden.

Zuerst wird kopiert, wie es in der Django-Admin-App gemacht wird, die ein Kontrollkästchen mit einer Bezeichnung ähnlich wie "Löschen?" Haben soll. Wenn Sie das Formset später in der POST-Anforderung verarbeiten, überprüfen Sie, ob das Kontrollkästchen True ist, und wenn ja, löschen Sie den Datensatz. Dies ist wahrscheinlich nicht das, was Sie suchen, da Sie das Wort "dynamisch" in Ihrem Fragetitel verwendet haben :)

So eine zweite, dynamische Methode wäre, Javascript zu verwenden, um den gelöschten Datensatz auf dem "auszublenden" Seite und setzen Sie das Kontrollkästchen zum Löschen auf True. Dann verarbeiten Sie das Formularset auf die gleiche Weise wie die erste Option oben. Siehe Code django-dynamic-formset für Code zum Löschen von Formsets auf diese Weise.

Der dritte, dynamische Weg wäre, Ajax zu verwenden und wenn die Schaltfläche zum Löschen geklickt wird, muss JS eine Löschansicht aufrufen, um den Datensatz zu löschen und auch das Formset aus dem HTML zu löschen. Ich kann Sie nicht auf einen Beispielcode dafür hinweisen, aber ich denke, dass die zweite oben genannte Methode sowieso besser ist, weil Sie Ihren gesamten Authentifizierungs- und Standard-Formular-Validierungscode an einem Ort behalten können.