diff options
| 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 |
| commit | 0a59bcab6d4da512a869d16ee761678ddbab9882 (patch) | |
| tree | 37ce0867d3e64c566da936e2bc43b4addef79683 /chimere/forms.py | |
| parent | 8f6517965947b4a7bc44ca623e6e3db72d034484 (diff) | |
| download | Chimè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.py | 49 |
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 """ |
