summaryrefslogtreecommitdiff
path: root/chimere/main/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/main/forms.py')
-rw-r--r--chimere/main/forms.py95
1 files changed, 40 insertions, 55 deletions
diff --git a/chimere/main/forms.py b/chimere/main/forms.py
index 11b1d99..7273281 100644
--- a/chimere/main/forms.py
+++ b/chimere/main/forms.py
@@ -147,7 +147,7 @@ required=False)' % (property.order, property.id, property.name,
def save(self, *args, **keys):
"""
- Custom save method in order to manage associeted properties
+ Custom save method in order to manage associated properties
"""
new_marker = super(MarkerAdminForm, self).save(*args, **keys)
if 'status' not in self.cleaned_data:
@@ -157,27 +157,10 @@ required=False)' % (property.order, property.id, property.name,
new_marker.available_date = datetime.replace(datetime.utcnow(),
tzinfo=tz)
new_marker.save()
- # save each property
- for propertymodel in PropertyModel.objects.filter(available=True):
- properties = Property.objects.filter(marker=new_marker,
- propertymodel=propertymodel)
- # new property
- if not properties:
- new_property = Property.objects.create(marker=new_marker,
- propertymodel=propertymodel,
- value=self.cleaned_data['property_%d_%d' % (
- propertymodel.order, propertymodel.id)])
- new_property.save()
- else:
- # in case of multiple edition as the same time delete arbitrary
- # the others
- if len(properties) > 1:
- for property in properties[1:]:
- property.delete()
- property = properties[0]
- property.value = self.cleaned_data['property_%d_%d' % (
- propertymodel.order, propertymodel.id)]
- property.save()
+ # save properties
+ properties = dict([(k.split('_')[-1], self.cleaned_data[k]) \
+ for k in self.cleaned_data.keys() if k.startswith('property_')])
+ new_marker.saveProperties(properties)
return new_marker
class MarkerForm(MarkerAdminForm):
@@ -192,12 +175,6 @@ class RouteAdminForm(forms.ModelForm):
"""
Main form for route
"""
- """
- # declare properties
- for property in PropertyModel.objects.filter(available=True):
- exec('property_%d_%d = forms.CharField(label="%s", widget=%s, \
-required=False)' % (property.order, property.id, property.name,
- PropertyModel.TYPE_WIDGET[property.type]))"""
class Meta:
model = Route
@@ -223,43 +200,51 @@ required=False)' % (property.order, property.id, property.name,
def save(self, *args, **keys):
"""
- Custom save method in order to manage associeted properties
+ Custom save method in order to manage status
"""
- new_marker = super(RouteAdminForm, self).save(*args, **keys)
+ new_route = super(RouteAdminForm, self).save(*args, **keys)
if 'status' not in self.cleaned_data:
- new_marker.status = 'S'
- new_marker.save()
- """
- # save each property
- for propertymodel in PropertyModel.objects.filter(available=True):
- properties = Property.objects.filter(marker=new_marker,
- propertymodel=propertymodel)
- # new property
- if not properties:
- new_property = Property.objects.create(marker=new_marker,
- propertymodel=propertymodel,
- value=self.cleaned_data['property_%d_%d' % (
- propertymodel.order, propertymodel.id)])
- new_property.save()
- else:
- # in case of multiple edition as the same time delete arbitrary
- # the others
- if len(properties) > 1:
- for property in properties[1:]:
- property.delete()
- property = properties[0]
- property.value = self.cleaned_data['property_%d_%d' % (
- propertymodel.order, propertymodel.id)]
- property.save()"""
- return new_marker
+ new_route.status = 'S'
+ new_route.save()
+ return new_route
class RouteForm(RouteAdminForm):
"""
Form for the edit page
"""
+ picture = forms.ImageField(label=_("Image"), required=False)
+ point = forms.CharField(label="", required=False, widget=forms.HiddenInput)
class Meta:
model = Route
exclude = ('status',)
+ # marker properties
+ for property in PropertyModel.objects.filter(available=True):
+ exec('property_%d_%d = forms.CharField(label="%s", widget=%s, \
+required=False)' % (property.order, property.id, property.name,
+ PropertyModel.TYPE_WIDGET[property.type]))
+
+ def save(self, *args, **keys):
+ """
+ Custom save method in order to manage associated marker
+ """
+ new_route = super(RouteForm, self).save(*args, **keys)
+ marker_fields = [f.attname for f in Marker._meta.fields]
+ marker_dct = dict([(k, self.cleaned_data[k]) for k in self.cleaned_data
+ if k in marker_fields])
+ marker_dct['route'] = new_route
+ if 'status' not in marker_dct:
+ marker_dct['status'] = "S"
+ categories = []
+ new_marker = Marker(**marker_dct)
+ new_marker.save()
+ for category in self.cleaned_data['categories']:
+ new_marker.categories.add(category)
+ new_marker.save()
+ # save properties
+ properties = dict([(k.split('_')[-1], self.cleaned_data[k]) \
+ for k in self.cleaned_data.keys() if k.startswith('property_')])
+ new_marker.saveProperties(properties)
+ return new_route
class AreaAdminForm(forms.ModelForm):
"""