如何在模板中显示show ValidationError

时间:2016-06-14 10:34:32

标签: django django-forms django-templates django-1.5

我已经构建了一个视图,一个模板和一个表单,用于上传CSV文件和其他一些信息。

我在显示ValidationError时遇到问题,我在表单的clean()函数中定义了它:

这是表格的一部分:

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。

1 个答案:

答案 0 :(得分: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,所以我不明白这项额外检查的目的是什么。