Django 引发 Validationerror 导致值类型错误
Django raise Validationerror leads to Valuetype Error
我尝试使用 RegistrationForm class 中的 clean_field 函数对用户上传的文件进行类型检查。验证部分运行良好,重定向仅在上传 .kml 文件时有效。但是当我尝试上传非 KML 文件时出现问题。 raise 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 很陌生,所以我可能会遗漏一个重要的部分。任何形式的帮助将不胜感激。谢谢 :)
问题在这里:
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
。你对那个场景没有任何逻辑。所以视图函数 returns None
而不是任何 HttpResponse
对象。
您需要在此处添加另一个 else
块,以再次呈现相同的表单。这次连同表单字段,您还应该显示错误(错误消息将包含您传递给 ValidationError
的参数)。
所以可以在 else
块中添加类似这样的内容:
return render(request, "secondpage.html", {'head_title': 'Head','form1': form,})
(就像您正常的 get 请求一样)
我尝试使用 RegistrationForm class 中的 clean_field 函数对用户上传的文件进行类型检查。验证部分运行良好,重定向仅在上传 .kml 文件时有效。但是当我尝试上传非 KML 文件时出现问题。 raise 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 很陌生,所以我可能会遗漏一个重要的部分。任何形式的帮助将不胜感激。谢谢 :)
问题在这里:
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
。你对那个场景没有任何逻辑。所以视图函数 returns None
而不是任何 HttpResponse
对象。
您需要在此处添加另一个 else
块,以再次呈现相同的表单。这次连同表单字段,您还应该显示错误(错误消息将包含您传递给 ValidationError
的参数)。
所以可以在 else
块中添加类似这样的内容:
return render(request, "secondpage.html", {'head_title': 'Head','form1': form,})
(就像您正常的 get 请求一样)