2016-08-18 30 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,}) 

のための私の表示方法です。私はDjangoにはかなり新しいので、私は重要な部分を欠いているかもしれません。どんな種類の助けでも大歓迎です。ありがとうございました:)

答えて

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!しかし、今私はエラーメッセージを表示する方法を確認する必要があります!この点に関する助け? –

関連する問題