summaryrefslogtreecommitdiff
path: root/chimere/forms.py
diff options
context:
space:
mode:
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
commitc341b4c3952fe1cdb678fe878d82df49f8d83623 (patch)
tree1c3b1cf060abbd5cc0b0cceec4e178d778b46ad5 /chimere/forms.py
parentddb223e236be65cc4959b735f0396284ca4719f9 (diff)
downloadChimè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.py48
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')