summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit1bd739ba7484a5ec62076071eaed65953673c5bc (patch)
tree58c330a330146dfef9403cede3d2e84a3690cfae
parentb29dabd91dcd30692065b220120ab7f93ba2672c (diff)
downloadIshtar-1bd739ba7484a5ec62076071eaed65953673c5bc.tar.bz2
Ishtar-1bd739ba7484a5ec62076071eaed65953673c5bc.zip
Better management of deletion tests (refs #156)
-rw-r--r--ishtar/furnitures/forms.py30
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: