2016-06-14 3 views
0

다른 정보와 함께 CSV 파일을 업로드하는 데 사용되는 뷰, 템플리트 및 양식을 빌드했습니다.템플릿에 쇼 ValidationError를 표시하는 방법

이 나는 ​​형태의 내 청소() 함수에 정의 된 ValidationError를 표시하는 문제가있다 :

이 양식의 일부입니다

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 

그리고이 내 시야의 일부입니다 :

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})) 

내가 템플릿의 형태로 렌더링하는 방법이 있습니다 :

<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> 

{{ field.errors }}에 내 ValidationError가 표시되지 않는 문제가 있습니다.

답변

3

clean() 메서드에서 유효성 검사를 제기 했으므로이 오류는 form.non_field_errors()에 저장됩니다.

csv 필드의 값만 확인하고 해당 필드에 오류를 지정하려는 경우 대신 clean_csv을 무시해야합니다.

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

당신은 이미 required=True, 그래서 나는이 추가 검사가 할 무엇을 의미하는지 이해가 안 돼요.

+0

글쎄, 필자는 이해할 수 없다는 것을 알고 있지만 마침내 파일의 형식 유형을 확인하고 CSV 만 허용하는 옵션을 추가하려고합니다. – user1919

+0

제공된 기능 (clean_csv)을 사용하면 템플릿의 오류 메시지에 어떻게 액세스 할 수 있습니까? {{field.errors}} 또는 아무것도 반환하지 않습니다. – user1919

+1

'clean_csv' 메소드를 정의하면'{{field.errors}}'('field'가 csv 필드 일 때)에 에러가 발생합니다. 그게 아무것도 표시하지 않으면 csv 필드에 오류가없는 것처럼 들립니다. – Alasdair

관련 문제