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))
それはちょうどたぶん、あなたは、このアプローチを使用することができます離れて(._.)
ありがとうございました。 2年後、Djangoはまだform_validまたはform_invalidでコンテキストを更新する方法を提供していません。 – pymarco
そしてdjango 1.7でも:( – vinyll
Django 1.8はform_validでコンテキストを更新する方法を提供していますか? –