2016-06-14 7 views
0

Ich habe eine Ansicht, eine Vorlage und ein Formular erstellen, die verwendet wird, um eine CSV-Datei zusammen mit einigen anderen Informationen hochzuladen.So zeigen Sie die Show ValidationError in Vorlage

Ich habe Probleme den Validation Anzeige, die ich in meiner clean() Funktion der Form definiert:

Dieser Teil der Form ist:

class UploadCSVForm(forms.Form): 

    title = forms.CharField(max_length=255, help_text='Title', required=True) 

    LAYER_TYPE = (
    ('1', 'Globa;'), 
    ) 
    layer_type = forms.ChoiceField(choices=LAYER_TYPE, help_text='Type of layer', required=True) 

    csv = forms.FileField(required=True) 

    def clean(self): 

    cleaned_data = super(UploadCSVForm, self).clean() 
    csv_file = self.cleaned_data.get('csv') 
    if not csv_file: 
     raise forms.ValidationError(_("CSV must be a file.")) 

    return cleaned_data 

Und das ist ein Teil meiner Ansicht:

def layer_create(request, template='layers/layer_create.html'): 
.... 
elif request.method == 'POST': 

    form = UploadCSVForm(request.POST, request.FILES) 
    out = {} 
    if form.is_valid(): 
     try: 
      title = form.cleaned_data["title"] 
     except: 
      ... 
return render_to_response(template, RequestContext(request, {'form': form})) 

Und das ist, wie ich die Form in der Vorlage machen:

<form id="file-uploader" method="post" enctype="multipart/form-data" action="{% url "layer_create" %}"> 
     <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> 
     {% for field in form.visible_fields %} 
      {{ field.help_text }} <br/> 
      {{ field }} <br/> 
      {{ field.errors }}<br/> 
     {% endfor %} 
     <button type="submit" id="upload-button" class="btn btn-danger">Upload</button> 
    </form> 

Das Problem ist, dass {{ field.errors }} meine ValidationError nicht anzeigen.

Antwort

3

Sie haben die Validierung in der Methode clean() ausgelöst, daher wird dieser Fehler in form.non_field_errors() gespeichert. Wenn Sie nur den Wert des Feldes csv überprüfen und diesem Feld Fehler zuweisen möchten, sollten Sie stattdessen clean_csv überschreiben.

def clean_csv(self): 
    csv = self.cleaned_data['csv'] 
    if not csv: 
     raise forms.ValidationError(_("CSV must be a file.")) 
    return csv 

Sie haben bereits required=True, so dass ich nicht verstehen, was diese zusätzliche Kontrolle zu tun, gemeint ist.

+0

Nun, ich weiß, es macht keinen Sinn, wie es ist, aber schließlich möchte ich die Option hinzufügen, um den Formattyp der Datei zu überprüfen und nur CSV zu akzeptieren. – user1919

+0

Wenn ich die von Ihnen angegebene Funktion (clean_csv) verwende, wie kann ich auf die Fehlermeldungen in der Vorlage zugreifen? {{field.errors}} oder gibt nichts zurück. – user1919

+1

Wenn Sie eine 'clean_csv'-Methode definieren, dann sind die Fehler in' {{field.errors}} '(wenn' field' das csv-Feld ist). Wenn das nichts anzeigt, dann hört es sich an, als hätte das CSV-Feld keine Fehler. – Alasdair

Verwandte Themen