मैं इसे 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))
यह सिर्फ kwargs दूर (._.)
समाधान के लिए धन्यवाद। दो साल बाद और Django अभी भी form_valid या form_invalid में संदर्भ अद्यतन करने का कोई तरीका प्रदान नहीं करता है। – pymarco
और न Django में 1.7 :( – vinyll
Do Django 1.8 form_valid में संदर्भ अद्यतन करने के लिए एक तरीका प्रदान करते? –