diff options
Diffstat (limited to 'chimere/main/forms.py')
-rw-r--r-- | chimere/main/forms.py | 95 |
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): """ |