Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Moved the code to handle goto requests in a extra WizardView method.

  • Loading branch information...
commit 46246c66243c97198879c9ac79ef859ae2474524 1 parent 930af66
@stephrdev stephrdev authored
View
28 django/contrib/formtools/wizard/views.py
@@ -257,11 +257,7 @@ def post(self, *args, **kwargs):
# form. (This makes stepping back a lot easier).
wizard_goto_step = self.request.POST.get('wizard_goto_step', None)
if wizard_goto_step and wizard_goto_step in self.get_form_list():
- self.storage.current_step = wizard_goto_step
- form = self.get_form(
- data=self.storage.get_step_data(self.steps.current),
- files=self.storage.get_step_files(self.steps.current))
- return self.render(form)
+ return self.render_goto_step(wizard_goto_step)
# Check if form was refreshed
management_form = ManagementForm(self.request.POST, prefix=self.prefix)
@@ -309,6 +305,17 @@ def render_next_step(self, form, **kwargs):
self.storage.current_step = next_step
return self.render(new_form, **kwargs)
+ def render_goto_step(self, goto_step, **kwargs):
+ """
+ This method gets called when the current step has to be changed.
+ `goto_step` contains the requested step to go to.
+ """
+ self.storage.current_step = goto_step
+ form = self.get_form(
+ data=self.storage.get_step_data(self.steps.current),
+ files=self.storage.get_step_files(self.steps.current))
+ return self.render(form)
+
def render_done(self, form, **kwargs):
"""
This method gets called when all forms passed. The method should also
@@ -652,8 +659,7 @@ def post(self, *args, **kwargs):
"""
wizard_goto_step = self.request.POST.get('wizard_goto_step', None)
if wizard_goto_step and wizard_goto_step in self.get_form_list():
- self.storage.current_step = wizard_goto_step
- return redirect(self.get_step_url(wizard_goto_step))
+ return self.render_goto_step(wizard_goto_step)
return super(NamedUrlWizardView, self).post(*args, **kwargs)
def get_context_data(self, form, **kwargs):
@@ -674,6 +680,14 @@ def render_next_step(self, form, **kwargs):
self.storage.current_step = next_step
return redirect(self.get_step_url(next_step))
+ def render_goto_step(self, goto_step, **kwargs):
+ """
+ This method gets called when the current step has to be changed.
+ `goto_step` contains the requested step to go to.
+ """
+ self.storage.current_step = goto_step
+ return redirect(self.get_step_url(goto_step))
+
def render_revalidation_failure(self, failed_step, form, **kwargs):
"""
When a step fails, we have to redirect the user to the first failing
View
11 docs/ref/contrib/formtools/form-wizard.txt
@@ -454,6 +454,17 @@ Advanced ``WizardView`` methods
def process_step_files(self, form):
return self.get_form_step_files(form)
+.. method:: WizardView.render_goto_step(step, goto_step, **kwargs)
+
+ .. versionchanged:: 1.6
+
+ This method is called when the step should be changed to something else
+ than the next step. By default, this method just stores the requested
+ step ``goto_step`` in the storage and then renders the new step.
+
+ If you want to store the entered data of the current step before rendering
+ the next step, you can overwrite this method.
+
.. method:: WizardView.render_revalidation_failure(step, form, **kwargs)
When the wizard thinks all steps have passed it revalidates all forms with
Please sign in to comment.
Something went wrong with that request. Please try again.