2016-04-29 10 views
1

Ich habe folgende Inline-formset:Inline Formularvalidierung gibt leere formset.errors Liste

CreateClientFormset = inlineformset_factory(
    Client, 
    EventType, 
    fields=(
     'name', 
    ), 
    extra=0, 
    can_delete=True, 
    min_num=1, 
    validate_min=True, 
    widgets={ 
     'name': forms.TextInput(attrs={ 
      'class':'form-control', 
      'maxlength' : 50 
     }) 
    }) 

und die folgende Ansicht:

def create_client(request): 
    form = CreateClient() 
    formset = CreateClientFormset(instance=Client()) 

    if request.method == 'POST': 
     form = CreateClient(request.POST) 

     if form.is_valid(): 
      client_saved = form.save(commit=False) 
      client_formset = CreateClientFormset(request.POST, request.FILES, instance=client_saved) 

      if client_formset.is_valid(): 
       client_saved.save() 
       client_formset.save() 

       return redirect(clients) 
      else: 
       print client_formset.errors 
    else: 
     print form.errors 

    return render(request, 'create_client.html', {'form' : form, 'formset' : formset}) 

Wenn ich versuche, einen leeren Wert auf die formset vorzulegen, Es druckt den Fehler auf der Konsole, aber es tut nichts in der Vorlage.

Dies ist meine Vorlage:

{% for field in formset %} 
{{ formset.management_form }} 
    <tr> 
     <td><label>{{ field.name.label }}</label></td> 
      <td> 
       {% if field.instance.pk %}{{ field.DELETE }}{% endif %} 
       {{ field.name }} 
       {{ formset.errors }} 
       {{ field.id }} 
       {% for hidden in formset.hidden_fields %} 
       {{ hidden }} 
       {% endfor %} 
      </td> 
    </tr> 
{% endfor %} 

{{ formset.errors }} Displays [], noch vor der Formulareinreichung.

Was mache ich falsch? Vielen Dank.

+0

Wenn der Teil der Ansicht ist, wo Sie die Vorlage angezeigt werden? –

+0

Siehe die Bearbeitung @DanielRoseman, am unteren Rand des "Ansicht" -Teils. –

Antwort

1

Sie machen formset:

return render(request, 'create_client.html', {'form' : form, 'formset' : formset}) 

aber der mit dem Formular Daten/Fehler geladen ist client_formset:

print client_formset.errors 

Die zweite Sie passieren müssen, um zu machen, da Sie {{ formset.errors }} verwenden in deine Vorlage

2

ich es wie folgt gelöst:

if client_formset.is_valid(): 
    client_saved.save() 
    client_formset.save() 

    return redirect(clients) 
else: 
    print client_formset.errors 
    return render(request, 'create_client.html', {'form' : form, 'formset' : formset, 'formset_errors' : client_formset.errors}) 

Und in der Vorlage:

{% for field in formset %} 
    <tr> 
     <td><label>{{ field.name.label }}</label></td> 
     <td> 
      {% if field.instance.pk %}{{ field.DELETE }}{% endif %} 
      {{ field.name }} 
      {% if formset_errors %} 
       {% for errors in formset_errors %} 
        {% for error in errors.values %} 
         {{ error }} 
        {% endfor %} 
       {% endfor %} 
      {% endif %} 
      {{ field.id }} 
      {% for hidden in formset.hidden_fields %} 
       {{ hidden }} 
      {% endfor %} 
     </td> 
    </tr> 
{% endfor %}