summaryrefslogtreecommitdiff
path: root/chimere/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/forms.py')
-rw-r--r--chimere/forms.py35
1 files changed, 18 insertions, 17 deletions
diff --git a/chimere/forms.py b/chimere/forms.py
index 06845d7..52e727c 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -99,15 +99,10 @@ class CategoryAdminForm(forms.ModelForm):
class Meta:
model = Category
-class MarkerAdminForm(forms.ModelForm):
+class MarkerAdminFormBase(forms.ModelForm):
"""
Main form for marker
"""
- # 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 = Marker
@@ -126,8 +121,8 @@ class MarkerAdminForm(forms.ModelForm):
keys['initial'].update(property_dct)
else:
keys['initial'] = property_dct
- super(MarkerAdminForm, self).__init__(*args, **keys)
- if settings.DAYS_BEFORE_EVENT:
+ super(MarkerAdminFormBase, self).__init__(*args, **keys)
+ if settings.CHIMERE_DAYS_BEFORE_EVENT:
self.fields['start_date'].widget = AdminDateWidget()
self.fields['end_date'].widget = AdminDateWidget()
@@ -135,7 +130,7 @@ class MarkerAdminForm(forms.ModelForm):
'''
Verify that a start date is provided when an end date is set
'''
- if not settings.DAYS_BEFORE_EVENT:
+ if not settings.CHIMERE_DAYS_BEFORE_EVENT:
return self.cleaned_data
if self.cleaned_data['end_date'] and \
not self.cleaned_data['start_date']:
@@ -148,7 +143,8 @@ class MarkerAdminForm(forms.ModelForm):
"""
Custom save method in order to manage associated properties
"""
- new_marker = super(MarkerAdminForm, self).save(*args, **keys)
+ print self.cleaned_data
+ new_marker = super(MarkerAdminFormBase, self).save(*args, **keys)
if 'status' not in self.cleaned_data:
new_marker.status = 'S'
if new_marker.status == 'A':
@@ -162,6 +158,16 @@ class MarkerAdminForm(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
@@ -193,13 +199,13 @@ class RouteAdminForm(forms.ModelForm):
else:
keys['initial'] = property_dct
super(RouteAdminForm, self).__init__(*args, **keys)
- if settings.DAYS_BEFORE_EVENT:
+ if settings.CHIMERE_DAYS_BEFORE_EVENT:
self.fields['start_date'].widget = AdminDateWidget()
self.fields['end_date'].widget = AdminDateWidget()
def save(self, *args, **keys):
"""
- Custom save method in order to manage status
+ Custom save method in order to manage associated properties
"""
new_route = super(RouteAdminForm, self).save(*args, **keys)
if 'status' not in self.cleaned_data:
@@ -218,11 +224,6 @@ class RouteForm(RouteAdminForm):
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):
"""