2016-06-14 5 views
0

私はビュー、テンプレート、およびフォームをビルドしました。これはCSVファイルを他の情報と一緒にアップロードするために使用されます。テンプレートでショーを表示する方法

は、私は、フォームの私のクリーン()関数で定義されて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

関連する問題