Actualmente, tengo un formulario que se ve así:
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) Sin embargo, preferiría hacer algo más idiomático y usar get_success_url . Algo como esto:
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) Sin embargo, el formulario no se pasa a get_success_url y, a diferencia de muchas otras piezas de contexto de solicitud (como self.request , self.kwargs o self.object (en DetailView )), el formulario no se adjunta como un atributo en ningún punto de la secuencia de envío estándar FormView . ¿Hay alguna buena manera de acceder a datos de formularios limpios y validados en get_success_url (es decir, sin tener que acceder a self.request.POST o reconstruir el formulario desde cero)?
Puede anular el método form_valid para escribir form como atributo de instancia y usar self.form dentro 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)Puede establecer el atributo success_url en el método form_valid obteniendo el valor del campo de formulario si es necesario
class SelectBoard(generic.FormView): form_class = forms.SelectBoard def form_valid(self, form): board_name = form.cleaned_data['name'] self.success_url = reverse('leaderboard', board_name=board_name) return super().form_valid(form)