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