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') |