summaryrefslogtreecommitdiff
path: root/chimere/forms.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-08-28 00:58:50 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-08-28 00:58:50 +0200
commit0a59bcab6d4da512a869d16ee761678ddbab9882 (patch)
tree37ce0867d3e64c566da936e2bc43b4addef79683 /chimere/forms.py
parent8f6517965947b4a7bc44ca623e6e3db72d034484 (diff)
downloadChimère-0a59bcab6d4da512a869d16ee761678ddbab9882.tar.bz2
Chimère-0a59bcab6d4da512a869d16ee761678ddbab9882.zip
Finaly roll back the dynamic management of properties
In fact I cannot manage theses properties in admin if dynamic. On the other side an improvment has been made: disabled properties are available in admin forms.
Diffstat (limited to 'chimere/forms.py')
-rw-r--r--chimere/forms.py49
1 files changed, 30 insertions, 19 deletions
diff --git a/chimere/forms.py b/chimere/forms.py
index 818fa6e..646c169 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -118,7 +118,7 @@ class CategoryAdminForm(forms.ModelForm):
class Meta:
model = Category
-class MarkerAdminForm(forms.ModelForm):
+class MarkerAdminFormBase(forms.ModelForm):
"""
Main form for marker
"""
@@ -144,27 +144,12 @@ class MarkerAdminForm(forms.ModelForm):
keys['initial'] = property_dct
subcategories = keys.pop('subcategories') \
if 'subcategories' in keys else []
- super(MarkerAdminForm, self).__init__(*args, **keys)
+ super(MarkerAdminFormBase, 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):
'''
@@ -196,7 +181,7 @@ class MarkerAdminForm(forms.ModelForm):
"""
Custom save method in order to manage associated properties
"""
- new_marker = super(MarkerAdminForm, self).save(*args, **keys)
+ new_marker = super(MarkerAdminFormBase, self).save(*args, **keys)
if 'status' not in self.cleaned_data:
new_marker.status = 'S'
if new_marker.status == 'A':
@@ -210,7 +195,33 @@ class MarkerAdminForm(forms.ModelForm):
new_marker.saveProperties(properties)
return new_marker
-class MarkerForm(MarkerAdminForm):
+# As we have dynamic fields, it's cleaner to make the class dynamic too
+def get_properties(queryset):
+ fields = {}
+ for prop in queryset:
+ key = "property_%d_%d" % (prop.order, prop.id)
+ if prop.type == 'C':
+ choices = PropertyModelChoice.objects.filter(propertymodel=prop,
+ available=True
+ ).order_by('value')
+ fields[key] = forms.ChoiceField(label=prop.name,
+ choices=[('', '--')] + \
+ [(choice.pk, unicode(choice))
+ for choice in choices],
+ required=False)
+ else:
+ fields[key] = forms.CharField(label=prop.name,
+ widget=PropertyModel.TYPE_WIDGET[prop.type],
+ required=False)
+ return fields
+
+# in admin all fields are displayed
+MarkerAdminForm = type("MarkerAdminForm", (MarkerAdminFormBase,),
+ get_properties(PropertyModel.objects.all()))
+MarkerBaseForm = type("MarkerBaseForm", (MarkerAdminFormBase,),
+ get_properties(PropertyModel.objects.filter(available=True)))
+
+class MarkerForm(MarkerBaseForm):
"""
Form for the edit page
"""