2016-10-11 5 views
0

Ich habe mich in den letzten paar Tagen über dieses Problem Gedanken gemacht und ich habe zahlreiche andere Fragen über den gleichen Fehler gelesen, aber sie scheinen alle verschiedene Fälle zu sein (nicht inklusive Verwaltungsformular, vergessen zu aktualisieren TOTAL_FORMS, etc etc) und mein Problem nicht lösen. Ich habe eine Seite, die mehrere Formsets in einem einzigen HTML-Formular enthalten könnte. Wenn ich die Daten zurück auf den Server posten, schlägt es bei der Überprüfung von is_valid() für die Formsets mit dem Fehler im Titel fehl. Ich bin neu in der Webentwicklung und Django, also bitte vergib mir, wenn ich einen dummen Fehler gemacht habe oder einen Ansatz mache, der nicht funktioniert.Django - ManagementForm Daten fehlen oder wurden manipuliert

def purchase(request): 
    return generic_form_view(request, "inventory_tracking/add_purchases.html", 
            "Successfully added purchases for %s.", 
            PurchaseForm, 
            [formset_factory(PurchaseForm.LiquorForm), 
            formset_factory(PurchaseForm.NonLiquorForm)]) 

def generic_form_view(request, template, success_message, ParentForm, FormSets): 
    if request.method == 'POST': 
    request_params = copy(request.POST) 
    parent_form = ParentForm(request_params) 
    formsets = list(map(lambda form_set: form_set(request_params), FormSets)) 
    if parent_form.is_valid(): # This works. 
     for formset in formsets: 
      if formset.is_valid(): # Fails here. 

Hier ist ein Ausschnitt aus meiner Vorlage:

<form action="{% block form_action %}{% endblock %}" method="post"> 
    {% csrf_token %} 
    <div class="row"> 
     <div class="row"> 
      <div class=" well well-lg"> 
       <div class="row"> 
       {{ parent_form.management_form }} 
       {% for field in parent_form %} 
        <div class="col-lg-6"> 
         <div class="form-group"> 
          <label class="control-label">{{ field.label }}</label> 
          {{ field }} 
         </div> 
        </div> 
       {% endfor %} 
       </div> 
      </div> 
     </div> 
    </div> 

    <div class="row"> 
     {% for formset in formsets %} 
      {{ formset.management_form }} 
      <div class="row"> 
       <div class="well well-lg"> 
        {% for form in formset %} 
         <div id="{{ form.prefix }}" class="row"> 
         ... 

Ich habe versucht, dies zu debuggen, und ich bemerkte etwas ein wenig interessant, aber da ich mit Django nicht allzu vertraut bin könnte es sein, Ablenkungsmanöver. Im POST sehe ich die Daten des management_form für die Formsets, die ich erstelle, aber ich sehe nicht die Daten des management_form für das Eltern-Formularset (in diesem Fall PurchaseForm). Das parent_form-Objekt übergibt jedoch die Validierung und die anderen Formsets nicht.

Antwort

0

Ich erwartete, dass dies ein albernes Problem ist, und ich drehte mich um, Recht zu haben! Wenn meine generic_form_view-Methode die Formsets für die GET-Anforderung erstellt, habe ich ein Präfix wie die erwähnte Dokumentation hinzugefügt, aber ich habe kein Präfix hinzugefügt, als ich die Formsets auf dem POST erstellt habe.

Verwandte Themen