Currently, I have a form that looks like this:
class SelectBoard(generic.FormView):
form_class = forms.SelectBoard
def form_valid(self, form):
board_name = form.cleaned_data['name']
return redirect('leaderboard', board_name=board_name)
However, it would be my preference to do the more idiomatic thing, and use get_success_url
. Something like this:
class SelectBoard(generic.FormView):
form_class = forms.SelectBoard
def get_success_url(self):
form = ???
board_name = form.cleaned_data['name']
return reverse('leaderboard', board_name=board_name)
However, the form is not passed to get_success_url
, and unlike many other pieces of request context (like self.request
, self.kwargs
, or self.object
(in DetailView
)), the form is not attached as an attribute at any point in the standard FormView
dispatch sequence. Is there any good way to access cleaned & validated form data in get_success_url
(that is, without having to access self.request.POST
or reconstruct the form from scratch)?
You can override form_valid
method to write form as instance attribute and use self.form
inside get_success_url
:
class SelectBoard(generic.FormView):
form_class = forms.SelectBoard
def form_valid(self, form):
"""If the form is valid, redirect to the supplied URL."""
self.form = form
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
board_name = self.form.cleaned_data['name']
return reverse('leaderboard', board_name=board_name)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With