diff options
Diffstat (limited to 'chimere/forms.py')
-rw-r--r-- | chimere/forms.py | 33 |
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 |