2016-08-18 6 views
0

RegistrationForm 클래스 내에서 clean_field 함수를 사용하여 사용자가 업로드 한 파일에 대해 유형 검사를 시도했습니다. 유효성 검사 부분이 잘 작동하고 리디렉션은 .kml 파일이 업로드 될 때만 작동합니다. 그러나이 문제는 비 KML 파일을 업로드하려고 할 때 발생합니다. ValidationError가 발생하지 않는 것 같습니다. 대신 다음 오류가 브라우저에 표시됩니다.Django raise Validationerror가 Valuetype 오류로 연결됩니다.

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,}) 

내보기 방법이다. 나는 장고에 대해 아주 익숙하다. 그래서 나는 중요한 부분을 놓칠지도 모른다. 어떤 종류의 도움이라도 대단히 감사 할 것입니다. 감사합니다 :)

답변

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입니다. 해당 시나리오에 대한 논리가 없습니다. 따라서보기 함수는 HttpResponse 개체 대신 None을 반환합니다.

여기에 동일한 양식을 다시 렌더링하는 else 블록을 추가해야합니다. 이번에는 양식 필드와 함께 오류도 표시해야합니다 (오류 메시지에 전달한 인수가 ValidationError에 전달됨).

그래서 else 블록에서 다음과 같이 뭔가를 추가 할 수 있습니다

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

(그냥 같은 일반 GET 요청) 당신이 다른 블록을 추가 할 필요가 없습니다

+1

, 단지 해제 들여 쓰 기존의'return render()'를 사용합니다. 그래서 내부에있는 대신에'else' 뒤에옵니다. – Alasdair

+0

예, 좋은 생각입니다. 그가'POST' 요청으로부터 뷰에 추가 인수를 전달하기를 원하지 않는 한. – masnun

+0

Worked! 하지만 이제는 사용자에게 오류 메시지를 표시하는 방법을 확인해야합니다. 이 점에 어떤 도움이 필요합니까? –