summaryrefslogtreecommitdiff
path: root/chimere/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/forms.py')
-rw-r--r--chimere/forms.py33
1 files changed, 19 insertions, 14 deletions
diff --git a/chimere/forms.py b/chimere/forms.py
index 0b74b32..23bd295 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -33,7 +33,7 @@ from django.core.mail import EmailMessage, BadHeaderError
from chimere.models import Marker, Route, PropertyModel, Property, Area,\
News, Category, SubCategory, RouteFile, MultimediaFile, MultimediaType, \
- PictureFile, Importer
+ PictureFile, Importer, PropertyModelChoice
from chimere.widgets import AreaField, PointField, TextareaWidget, \
DatePickerWidget, ButtonSelectWidget, NominatimWidget
@@ -118,7 +118,7 @@ class CategoryAdminForm(forms.ModelForm):
class Meta:
model = Category
-class MarkerAdminFormBase(forms.ModelForm):
+class MarkerAdminForm(forms.ModelForm):
"""
Main form for marker
"""
@@ -143,12 +143,27 @@ class MarkerAdminFormBase(forms.ModelForm):
keys['initial'] = property_dct
subcategories = keys.pop('subcategories') \
if 'subcategories' in keys else []
- super(MarkerAdminFormBase, self).__init__(*args, **keys)
+ super(MarkerAdminForm, self).__init__(*args, **keys)
if settings.CHIMERE_DAYS_BEFORE_EVENT:
self.fields['start_date'].widget = DatePickerWidget()
self.fields['end_date'].widget = DatePickerWidget()
if subcategories:
self.fields['categories'].choices = subcategories
+ for prop in PropertyModel.objects.filter(available=True):
+ key = "property_%d_%d" % (prop.order, prop.id)
+ if prop.type == 'C':
+ choices = PropertyModelChoice.objects.filter(propertymodel=prop,
+ available=True
+ ).order_by('value')
+ self.fields[key] = forms.ChoiceField(label=prop.name,
+ choices=[('', '--')] + \
+ [(choice.pk, unicode(choice))
+ for choice in choices],
+ required=False)
+ else:
+ self.fields[key] = forms.CharField(label=prop.name,
+ widget=PropertyModel.TYPE_WIDGET[prop.type],
+ required=False)
def clean(self):
'''
@@ -180,7 +195,7 @@ class MarkerAdminFormBase(forms.ModelForm):
"""
Custom save method in order to manage associated properties
"""
- new_marker = super(MarkerAdminFormBase, self).save(*args, **keys)
+ new_marker = super(MarkerAdminForm, self).save(*args, **keys)
if 'status' not in self.cleaned_data:
new_marker.status = 'S'
if new_marker.status == 'A':
@@ -194,16 +209,6 @@ class MarkerAdminFormBase(forms.ModelForm):
new_marker.saveProperties(properties)
return new_marker
-# As we have dynamic fields, it's cleaner to make the class dynamic too
-fields = {}
-# declare properties
-for prop in PropertyModel.objects.filter(available=True):
- key = "property_%d_%d" % (prop.order, prop.id)
- fields[key] = forms.CharField(label=prop.name,
- widget=PropertyModel.TYPE_WIDGET[prop.type],
- required=False)
-MarkerAdminForm = type("MarkerAdminForm", (MarkerAdminFormBase,), fields)
-
class MarkerForm(MarkerAdminForm):
"""
Form for the edit page