Dynamisch Löschen form vom Modell Formularsatz django

Ich habe eine web-Seite, wo Benutzer können dynamisch hinzufügen und löschen von Formen, um django formsets.

Habe ich gelesen,Dynamisch hinzufügen einer form zu einem Django Formularsatz mit Ajax, auf dessen Basis ich hinzufügen können Sie die Formulare in einem Formularsatz dynamisch. Jetzt möchte ich löschen, das formset dynamisch. Ich habe mir bei Dynamisch Löschen inline formsets in Django

Wie ich will, es zu tun ist, wenn der Benutzer klickt auf löschen, ich habe eine ajax-Funktion, die löscht die Formular-Instanz-Datensatz aus der Datenbank. Wenn meine ajax Funktion gibt ich die gleichen total_form_count und initial_form_count und nur das verstecken der form von html, so dass auch der Datensatz gelöscht wird eingereicht in meinem POST.

Zunächst das formset erbringt Ihre Formular Elemente wie:

#form0
<input id="id_formprefix-0-id" type ="hidden "value="something" name="formprefix-0-id">
<input id="id_formprefix-0-field" value="something" type="text" name="formprefix-0-field">
#form1
<input id="id_formprefix-1-id" type ="hidden "value="something" name="formprefix-1-id">
<input id="id_formprefix-1-field" value="something" type="text" name="formprefix-1-field">
#form2
<input id="id_formprefix-2-id" type ="hidden "value="something" name="formprefix-2-id">
<input id="id_formprefix-2-field" value="something" type="text" name="formprefix-2-field">

Nun nehme ich dynamisch löschen form 0, mit ajax, nach meinem Datensatz gelöscht wird, weiß ich nicht, verändern Sie die form zählt, so dass die total_form_count und initial_form_count 3.

( Wenn ich reduzieren die total_form_count und initial_form_count in diesem Fall 2, wenn ich füllen Sie das formset meiner Ansicht nach mit POST-Daten, es wird erwartet, dass bestellt werden form0 und form1. Aber in meinem Fall sind die gültigen Formulare form1 und form2)

Nun in meinem Blick, ich bin etwas wie die folgenden zu sparen, meine form.

myformset = modelformset_factory(ObjectElement,form=Object_Form, extra=0, can_delete=True)
for form in myformset.forms:
    print(form.instance.id) #this does not print id of deleted record, but of the first existing record in the database.
    print(form.instance.attribute)# this prints the correct element, which was submitted by POST even for a deleted record.
    try: 
      objectInstance = ObjectElement.objects.get(id = form.instance.id)
      objectInstance.save()
    except ObjectElement.DoesNotExist:
      print("Do not save as the record has already been deleted")     

Wenn ich meine Formularsatz löschen, ohne jeden Eintrag das speichern funktioniert und die richtige form.instance.id gedruckt wird.
Jedoch wenn ich löschen einer form-Instanz, die mit ajax, und dann versuchen, zu speichern mein Formularsatz, der
print(form.instance.id) für den gelöschten Datensatz scheint zu drucken, wird die erste verfügbare id in der Datenbank, aber nicht die id per post eingereicht. (Als der Datensatz gelöscht wird , wird die id nicht in der Datenbank vorhanden, aber sollte es drucken, was vorgelegt wurde, um es per POST Recht? )

Wenn ich ohne try/catch Schleife bekomme ich die folgende Fehlermeldung von form.Fehler:

<ul class="errorlist"><li>id<ul class="errorlist"><li>Select a valid choice. That choice is not one of the available choices.</li></ul></li></ul>

scheint darauf hinzudeuten, dass es ist nicht zu akzeptieren, die richtigen Formular-ID Formular die eingereichten Beitrag für den gelöschten Datensatz.

Jeder Körper hat eine Idee, was ich hier vermisst? Oder einen besseren Weg, dies zu tun.

Wie gehen wir dynamisch Formular löschen von formsets, wie es scheint, dass die Reihenfolge der Formen sollte fortlaufend sein..

Vielen Dank im Voraus!! Jede Hilfe ist willkommen.

InformationsquelleAutor akotian | 2012-09-13
Schreibe einen Kommentar