2016-05-26 10 views
0

一見シンプルなDjangoビューで作業しますが、エラーは継続します。Djangoビューエラーで自己復帰

class RegistrationView(View): 
    def get(self, request, *args, **kwargs): 
     context = { 
      "user_form": UserForm(), 
      "contact_form": ContactForm(), 
      "company_form": CompanyForm(), 
     } 

     return render(request, "accounts/registration_form.html", context) 

    def post(self, request, *args, **kwargs): 
     user_form = UserForm(request.POST) 
     contact_form = ContactForm(request.POST) 
     company_form = CompanyForm(request.POST) 

     if user_form.is_valid() and contact_form.is_valid() and company_form.is_valid(): 
      self.form_valid() 
     else: 
      self.form_invalid(user_form, contact_form, company_form) 

    def form_valid(self): 
     return HttpResponseRedirect("/accounts/registration-complete") 

    def form_invalid(self, user_form, contact_form, company_form): 
     context = { 
      "user_form": user_form, 
      "contact_form": contact_form, 
      "company_form": company_form 
     } 

     return render_to_response(self.request, "accounts/registration_form.html", context) 

私はis_valid()上user_form、CONTACT_FORMとcompany_formをチェックすると、私はそのcompany_formが有効でないので、私はform_invalid()方法に行く見ることができます。
ここでは、データが事前に入力され、画面にエラーが表示された同じビューにリダイレクトする必要があります。

今、私は私が

return render(self.request, "accounts/registration_form.html", context) 

return render_to_response(self.request, "accounts/registration_form.html", context) 

を交換するとき、私は別のエラー・メッセージが取得エラーTemplateDoesNotExist at /accounts/register/
を得る:

ValueError at /accounts/register/ 
The view accounts.views.RegistrationView didn't return an HttpResponse object. 

完璧な理にかなっているが、私この問題を解決する方法がわかりません。 これには簡単な解決策があることを願っています。あなたのpost方法で

+0

'accounts/registration_form.html'にテンプレートがありますか?このエラーは、Djangoがそのテンプレートを見つけることができないことを示しています。 – solarissmoke

+0

@solarissmokeはい、あります。私はget()メソッドで同じテンプレートを使用します –

答えて

1

問題はあなたが電話していることではありません。render;そのを返しますHttpResponseを返します。問題は、postメソッドがform_valid()(または無効)を呼び出すという値を返さないことです。

if user_form.is_valid() and contact_form.is_valid() and company_form.is_valid(): 
    return self.form_valid() 
else: 
    return self.form_invalid(user_form, contact_form, company_form) 
2

は、あなたが実際にreturnform_validまたはform_invalidのいずれかを呼び出した結果を持っている:

if user_form.is_valid() and contact_form.is_valid() and company_form.is_valid(): 
     return self.form_valid() 
    else: 
     return self.form_invalid(user_form, contact_form, company_form) 

そうでなければ、あなたのpost方法は全く何も返しません!