diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-30 19:12:19 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-30 19:12:19 +0100 |
commit | 1bd739ba7484a5ec62076071eaed65953673c5bc (patch) | |
tree | 58c330a330146dfef9403cede3d2e84a3690cfae | |
parent | b29dabd91dcd30692065b220120ab7f93ba2672c (diff) | |
download | Ishtar-1bd739ba7484a5ec62076071eaed65953673c5bc.tar.bz2 Ishtar-1bd739ba7484a5ec62076071eaed65953673c5bc.zip |
Better management of deletion tests (refs #156)
-rw-r--r-- | ishtar/furnitures/forms.py | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index 5071adec7..1e9642072 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -132,7 +132,9 @@ class Wizard(NamedUrlSessionFormWizard): form.cleaned_data \ or [form.cleaned_data] for cleaned_data in cleaned_datas: - if cleaned_data and form_datas: + if not cleaned_data: + continue + if form_datas: form_datas.append(("", "", "spacer")) for key in cleaned_data: lbl = None @@ -735,7 +737,7 @@ class TownForm(forms.Form): form_label = _("Towns") associated_models = {'town':models.Town} # !FIXME hard_link, reverse_lazy doen't seem to work with formsets - town = forms.IntegerField(label=_(u"Town"), + town = forms.IntegerField(label=_(u"Town"), required=False, widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \ 'autocomplete-town', associated_model=models.Town), validators=[models.valid_id(models.Town)]) @@ -750,7 +752,7 @@ class TownFormSet(FormSet): form = self.forms[i] if not form.is_valid(): continue - if 'town' not in form.cleaned_data: + if 'town' not in form.cleaned_data or not form.cleaned_data['town']: continue town = form.cleaned_data['town'] if town in towns: @@ -763,13 +765,13 @@ TownFormSet.form_label = _("Towns") class ParcelForm(forms.Form): form_label = _("Parcels") associated_models = {'parcel':models.Parcel, 'town':models.Town} - town = forms.ChoiceField(label=_("Town"), choices=(), + town = forms.ChoiceField(label=_("Town"), choices=(), required=False, validators=[models.valid_id(models.Town)]) - section = forms.CharField(label=_(u"Section"), + section = forms.CharField(label=_(u"Section"), required=False, validators=[validators.MaxLengthValidator(4)]) - parcel_number = forms.CharField(label=_(u"Parcel number"), + parcel_number = forms.CharField(label=_(u"Parcel number"), required=False, validators=[validators.MaxLengthValidator(6)]) - year = forms.IntegerField(label=_("Year"), + year = forms.IntegerField(label=_("Year"), required=False, initial=lambda:datetime.datetime.now().year, validators=[validators.MinValueValidator(1900), validators.MaxValueValidator(2100)]) @@ -788,6 +790,19 @@ class ParcelForm(forms.Form): if towns: self.fields['town'].choices = [('', '--')] + towns + def clean(self): + """Check required fields""" + if any(self.errors): + return + if not self.cleaned_data or DELETION_FIELD_NAME in self.cleaned_data \ + and self.cleaned_data[DELETION_FIELD_NAME]: + return + for key in ('town', 'parcel_number', 'year'): + if not key in self.cleaned_data or not self.cleaned_data[key]: + raise forms.ValidationError(_(u"All fields are required")) + return self.cleaned_data + + class ParcelFormSet(FormSet): def clean(self): """Checks that no parcels are duplicated.""" @@ -797,6 +812,7 @@ class ParcelFormSet(FormSet): for i in range(0, self.total_form_count()): form = self.forms[i] if not hasattr(form, 'cleaned_data')\ + or not form.cleaned_data\ or 'town' not in form.cleaned_data \ or 'section' not in form.cleaned_data \ or 'parcel_number' not in form.cleaned_data: |