我已经构建了一个视图,一个模板和一个表单,用于上传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。
答案 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
,所以我不明白这项额外检查的目的是什么。