diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-03-07 21:29:55 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-03-07 21:29:55 +0100 | 
| commit | c341b4c3952fe1cdb678fe878d82df49f8d83623 (patch) | |
| tree | 1c3b1cf060abbd5cc0b0cceec4e178d778b46ad5 /chimere/forms.py | |
| parent | ddb223e236be65cc4959b735f0396284ca4719f9 (diff) | |
| download | Chimère-c341b4c3952fe1cdb678fe878d82df49f8d83623.tar.bz2 Chimère-c341b4c3952fe1cdb678fe878d82df49f8d83623.zip | |
Work on multimedia file forms - create, modify and remove.
Diffstat (limited to 'chimere/forms.py')
| -rw-r--r-- | chimere/forms.py | 48 | 
1 files changed, 42 insertions, 6 deletions
| diff --git a/chimere/forms.py b/chimere/forms.py index d534b53..4933c3a 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -23,6 +23,7 @@ Forms  from django import forms  from django.conf import settings  from django.contrib.gis.db import models +from django.core.exceptions import ImproperlyConfigured  from django.forms.formsets import formset_factory  from django.utils.translation import ugettext as _  from django.contrib.auth.models import User, Permission, ContentType @@ -270,24 +271,59 @@ class RouteForm(RouteAdminForm):          new_marker.saveProperties(properties)          return new_route -class MultimediaFileForm(forms.ModelForm): + +class BaseFileForm(forms.ModelForm): +    id = forms.IntegerField(label=u"", widget=forms.HiddenInput(), +                            required=False) + +    def __init__(self, *args, **kwargs): +        if not hasattr(self, '_related_name') or not self._related_name: +            raise ImproperlyConfigured +        super(BaseFileForm, self).__init__(*args, **kwargs) + +    def save(self, associated_marker): +        if not hasattr(self, 'cleaned_data') or not self.cleaned_data: +            return +        instance = None +        if self.cleaned_data.get('id'): +            try: +                # marker must be equal to none because the link has just be +                # removed - this condition is necessary to prevent modification +                # of already validated items by a forged request +                instance = self._meta.model.objects.get( +                           pk=self.cleaned_data['id'], marker=None) +            except: +                pass +            self.cleaned_data.pop('id') +        if self.cleaned_data.get('DELETE'): +            if instance: +                instance.delete() +            return +        self.cleaned_data.pop('DELETE') +        if instance: +            for k in self.cleaned_data: +                setattr(instance, k, self.cleaned_data[k]) +            instance.save() +        else: +            instance = self._meta.model.objects.create(**self.cleaned_data) +        getattr(associated_marker, self._related_name).add(instance) + +class MultimediaFileForm(BaseFileForm):      """      Form for a multimedia file      """ -    pk = forms.IntegerField(label=u"", widget=forms.HiddenInput(), -                            required=False) +    _related_name = 'multimedia_files'      class Meta:          model = MultimediaFile          exclude = ('order',)  MultimediaFileFormSet = formset_factory(MultimediaFileForm, can_delete=True) -class PictureFileForm(forms.ModelForm): +class PictureFileForm(BaseFileForm):      """      Form for a picture file      """ -    pk = forms.IntegerField(label=u"", widget=forms.HiddenInput(), -                            required=False) +    _related_name = 'pictures'      class Meta:          model = PictureFile          exclude = ('order', 'height', 'width') | 
