でこれを行いform_invalid
ます。これが私がそれを行う方法です:
from django.views.generic import FormView
class ContextFormView(FormView):
def get(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
context = self.get_context_data(**kwargs)
context['form'] = form
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form, **kwargs)
def form_invalid(self, form, **kwargs):
context = self.get_context_data(**kwargs)
context['form'] = form
return self.render_to_response(context)
form_valid を除いて同じことができます。通常、form_valid の本体は次のようになります。
def form_valid(self, form):
return HttpResponseRedirect(self.get_success_url())
を呼び出すため、post
との両方をオーバーライドする必要があります。form_valid
post
form_valid
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if form.is_valid():
return self.form_valid(form, **kwargs)
else:
return self.form_invalid(form, **kwargs)
def form_valid(self, form, **kwargs):
# take some other action here
return HttpResponseRedirect(self.get_success_url())
ああ、明確にするために、この問題が存在する理由は、ProcessFormView
クラスのget
メソッドが壊れていることです。通常は次のようになります。
def get(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
return self.render_to_response(self.get_context_data(form=form))
それはクワーグを捨てるだけです(._.)