diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-03-02 19:42:12 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-03-02 19:42:12 +0100 |
commit | 5458372986e3863732564a86365f99a57eb8d608 (patch) | |
tree | 493cb05e9c94dda7797636cc502c1e942164efdf /ishtar_common/wizards.py | |
parent | 479cb026b519e19385967b01a723a76882769d7e (diff) | |
download | Ishtar-5458372986e3863732564a86365f99a57eb8d608.tar.bz2 Ishtar-5458372986e3863732564a86365f99a57eb8d608.zip |
Creation wizard: can jump to the next form with mandatory fields (refs #3353)
Diffstat (limited to 'ishtar_common/wizards.py')
-rw-r--r-- | ishtar_common/wizards.py | 87 |
1 files changed, 56 insertions, 31 deletions
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index 5c4e1d3f9..210ea749a 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -238,41 +238,66 @@ class Wizard(NamedUrlWizardView): 'previous_step_counter': previous_step_counter}) storage = self.storage # if modification: show the next steps - if self.modification: - next_step = self.steps.first - current_step_passed = False - # force rechecking of conditions - self.get_form_list() - while next_step: - # check if the form is initialized otherwise initialize it - if not storage.get_step_data(next_step): - values = self.get_form_initial(next_step) - prefixed_values = MultiValueDict() - if not isinstance(values, list): - for key in values: - form_key = next_step + '-' + key - if isinstance(values, MultiValueDict): - prefixed_values.setlist(form_key, - values.getlist(key)) - else: - prefixed_values[form_key] = values[key] + # if self.modification or True: + next_step = self.steps.first + current_step_passed, no_next = False, False + # force rechecking of conditions + self.get_form_list() + while next_step: + # check if the form is initialized otherwise initialize it + if self.modification and not storage.get_step_data(next_step): + values = self.get_form_initial(next_step) + prefixed_values = MultiValueDict() + if not isinstance(values, list): + for key in values: + form_key = next_step + '-' + key + if isinstance(values, MultiValueDict): + prefixed_values.setlist(form_key, + values.getlist(key)) + else: + prefixed_values[form_key] = values[key] + else: + for formset_idx, v in enumerate(values): + prefix = u"-%d-" % formset_idx + for key in v: + form_key = next_step + prefix + key + prefixed_values[form_key] = v[key] + if not prefixed_values and \ + next_step not in self.get_ignore_init_steps(): + # simulate a non empty data for form that might be + # valid when empty + prefixed_values['__non_empty_data'] = '' + storage.set_step_data(next_step, prefixed_values) + if step == next_step: + current_step_passed = True + elif current_step_passed: + next_steps.append(self.form_list[next_step].form_label) + + # creation + if not self.modification: + form_obj = self.get_form(step=next_step) + if current_step_passed: + initialise_data = False + # formsets are considered not required + if hasattr(form_obj, 'fields'): + # display next step until a required field is met + if [field_key for field_key in form_obj.fields + if form_obj.fields[field_key].required]: + no_next = True + elif next_step not in self.get_ignore_init_steps(): + initialise_data = True else: - for formset_idx, v in enumerate(values): - prefix = u"-%d-" % formset_idx - for key in v: - form_key = next_step + prefix + key - prefixed_values[form_key] = v[key] - if not prefixed_values and \ - next_step not in self.get_ignore_init_steps(): + initialise_data = True + if initialise_data: # simulate a non empty data for form that might be # valid when empty + prefixed_values = MultiValueDict() prefixed_values['__non_empty_data'] = '' - storage.set_step_data(next_step, prefixed_values) - if step == next_step: - current_step_passed = True - elif current_step_passed: - next_steps.append(self.form_list[next_step].form_label) - next_step = self.get_next_step(next_step) + storage.set_step_data(next_step, prefixed_values) + + next_step = self.get_next_step(next_step) + if no_next: + break context.update({'next_steps': next_steps}) # not last step: validation if current_step != self.steps.last: |