Django引发Validationerror导致Valuetype错误

时间:2016-08-18 10:08:35

标签: django django-forms validationerror

我尝试使用RegistrationForm类中的clean_field函数对用户上传的文件进行类型检查。验证部分运行良好,重定向仅在上载.kml文件时有效。但是当我尝试上传非KML文件时会出现问题。引发ValidationError似乎不起作用。而是在浏览器上显示以下错误。

ValueError at /startanalysis/
The view aerial_analysis.views.second_page didn't return an HttpResponse object.It returned None instead.

这是我的表单文件

class RegistrationForm(forms.Form):
    resolution = forms.IntegerField(label='Enter required resolution : ')
    kml = forms.FileField(label='Enter File : ')
    CHOICES = (('1' , '1'), ('2', '2'))
    field = forms.ChoiceField(label='Type of analysis :',choices=CHOICES)

    def clean_kml (self):
        if not self.cleaned_data['kml'].name.endswith('.kml'):
            raise ValidationError("Please Upload a Valid KML File")
        return self.cleaned_data['kml']

以下是此页面的查看方法

def second_page(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST,request.FILES)
        if form.is_valid():
            return HttpResponseRedirect('/main')
    else:    
        form = RegistrationForm()
        return render(request, "secondpage.html", {'head_title': 'Head','form1': form,})

我希望浏览器只在表单字段上显示错误消息。我对Django很新,所以我可能会错过一个重要的部分。任何形式的帮助将不胜感激。谢谢:)

1 个答案:

答案 0 :(得分:0)

问题在于:

if request.method == 'POST':
    form = RegistrationForm(request.POST,request.FILES)
    if form.is_valid():
        return HttpResponseRedirect('/main')

当您上传非KML文件时,request.method仍为POST。但是,由于表单引发ValidationError,form.is_valid()False。你对这种情况没有任何逻辑。因此视图函数返回None而不是任何HttpResponse对象。

您需要在此处添加另一个else块,再次呈现相同的表单。这次与表单字段一起,您还应该显示错误(错误消息将包含您传递给ValidationError的参数)。

因此可能会在else块中添加类似内容:

return render(request, "secondpage.html", {'head_title': 'Head','form1': form,})

(就像你的正常获取请求一样)