diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-06 11:21:57 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-06 11:21:57 +0100 |
commit | c446500d56e2f1d49d7d602b5066c8613267184e (patch) | |
tree | 959ab639c0dd85d3cfcb9977401627b6e16de4d2 /ishtar/furnitures/forms.py | |
parent | 15a67f1b6300c1eadde9771e2f24983871f0a99d (diff) | |
download | Ishtar-c446500d56e2f1d49d7d602b5066c8613267184e.tar.bz2 Ishtar-c446500d56e2f1d49d7d602b5066c8613267184e.zip |
Manage a modify button in formsets (refs #51)
Diffstat (limited to 'ishtar/furnitures/forms.py')
-rw-r--r-- | ishtar/furnitures/forms.py | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index 3753d5cda..4bcc49324 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -140,6 +140,35 @@ class Wizard(NamedUrlSessionFormWizard): return render_to_response('wizard_done.html', {}, context_instance=RequestContext(request)) + def get_form(self, request, storage, step=None, data=None, files=None): + """ + Manage formset + """ + if data: + data = data.copy() + if not step: + step = self.determine_step(request, storage) + form = self.get_form_list(request, storage)[step] + if hasattr(form, 'management_form'): + # get a form key + base_key = form.form.base_fields.keys()[0] + total_field = len([key for key in data.keys() + if base_key in key.split('-') and data[key]]) + data[step + u'-INITIAL_FORMS'] = unicode(total_field) + data[step + u'-TOTAL_FORMS'] = unicode(total_field + 1) + form = super(Wizard, self).get_form(request, storage, step, data, files) + return form + + def render_next_step(self, request, storage, form, **kwargs): + """ + Manage the modify button in formset: next_step = current_step + """ + if request.POST.has_key('formset_modify') and \ + request.POST['formset_modify']: + return self.render(request, storage, form, **kwargs) + return super(Wizard, self).render_next_step(request, storage, form, + **kwargs) + class FileWizard(Wizard): pass @@ -174,7 +203,7 @@ class TownForm(forms.Form): town = forms.IntegerField(label=_(u"Town"), widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \ 'autocomplete-town', associated_model=models.Town), - validators=[models.Town.valid_id]) + validators=[models.Town.valid_id], required=False) TownFormSet = formset_factory(TownForm) TownFormSet.form_label = _("Towns") |