jazzband / django-formtools

A set of high-level abstractions for Django forms
https://django-formtools.readthedocs.io
BSD 3-Clause "New" or "Revised" License
794 stars 135 forks source link

Form reset does not work for NamedUrlWizardView #202

Open danielsjf opened 2 years ago

danielsjf commented 2 years ago

From the source code I understand that it is possible to reset formtools via See: https://github.com/jazzband/django-formtools/blob/dd0f278760919f080dfa0ecbc63c790247bf69d7/formtools/wizard/views.py#L652

This would work for urls like https://[...]formtools-url?reset

Unfortunately this doesn't work for named wizards since the step_url is not None. Setting it to None typically does not work with the url parameters https://[...]formtools-url/<step>/

I think adding the following code could solve this.

elif step_url == 'reset':
    self.storage.reset()
    self.storage.current_step = self.steps.first

After which urls like https://[...]formtools-url/reset/ could reset the form.

pfouque commented 6 months ago

As per the documentation, the wizard needs to be declared as 2 separate URLs, with and without the step parameter

urlpatterns = [
    re_path(r'^contact/(?P<step>.+)/$', contact_wizard, name='contact_step'),
    path('contact/', contact_wizard, name='contact'),
]

It makes it possible to start/continue the wizard, and reset parameter is working ONLY if the step is not defined. What makes sense, calling "reset" on a specific step should reset only this step, not the whole wizard! 😅

But I agree (because I did it), that handling a specific step_name (similar to the ‘done‘ one) to reset would be handy!