diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-06-07 14:11:49 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-06-07 14:11:49 +0200 | 
| commit | d3ca19836857031289a10d2aed8e5794c11f63cc (patch) | |
| tree | 2c4b3245d20848c43fba4dac264578ee37aa9920 /chimere/main/forms.py | |
| parent | 494b96ec210a9eefa00fbabc499d4ed240580ab3 (diff) | |
| download | Chimère-d3ca19836857031289a10d2aed8e5794c11f63cc.tar.bz2 Chimère-d3ca19836857031289a10d2aed8e5794c11f63cc.zip | |
Add automaticaly a begin POI for new route (closes #300)
Better management of properties saving.
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):      """ | 
