diff options
Diffstat (limited to 'chimere/forms.py')
-rw-r--r-- | chimere/forms.py | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/chimere/forms.py b/chimere/forms.py index 1d49ff3..0d866a7 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -25,7 +25,7 @@ from django import forms from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import reverse -from django.db.models import Q +from django.db.models import Q, Count from django.forms.formsets import formset_factory from django.utils.translation import ugettext as _ from django.contrib.auth.models import User, Permission, ContentType @@ -270,7 +270,17 @@ class MarkerAdminFormBase(forms.ModelForm): """ Custom initialization method in order to manage properties """ - self.pms = [pm for pm in PropertyModel.objects.filter(available=True)] + area_name = None + if 'area_name' in keys: + area_name = keys.pop('area_name') + q = PropertyModel.objects.filter(available=True) + if area_name: + # areas__count__gt=0 necessary to prevent Django bug + q = q.annotate(Count('areas'))\ + .filter( + (Q(areas__urn=area_name) & Q(areas__count__gt=0)) | + Q(areas__count=0)) + self.pms = [pm for pm in q.all()] if 'instance' in keys and keys['instance']: instance = keys['instance'] property_dct = {} @@ -292,11 +302,19 @@ class MarkerAdminFormBase(forms.ModelForm): self.fields['categories'].choices = subcategories elif hasattr(self, 'categories_choices'): self.fields['categories'].choices = self.categories_choices - if not settings.CHIMERE_SEARCH_ENGINE: + if not settings.CHIMERE_SEARCH_ENGINE and 'keywords' in self.fields: self.fields.pop('keywords') if not settings.CHIMERE_DAYS_BEFORE_EVENT: self.fields.pop('start_date') self.fields.pop('end_date') + # not a clean way to filter properties... + # to do: change creation process + pms = [pm.getNamedId() for pm in self.pms] + for k in self.fields.keys(): + if not k.startswith('property_') or \ + k in pms: + continue + self.fields.pop(k) def clean(self): ''' @@ -402,6 +420,8 @@ class RouteAdminForm(forms.ModelForm): """ Main form for route """ + name = forms.CharField(_(u"Name"), required=True) + class Meta: model = Route @@ -409,6 +429,17 @@ class RouteAdminForm(forms.ModelForm): """ Custom initialization method in order to manage properties """ + area_name = None + if 'area_name' in keys: + area_name = keys.pop('area_name') + q = PropertyModel.objects.filter(available=True) + if area_name: + # areas__count__gt=0 necessary to prevent Django bug + q = q.annotate(Count('areas'))\ + .filter( + (Q(areas__urn=area_name) & Q(areas__count__gt=0)) | + Q(areas__count=0)) + self.pms = [pm for pm in q.all()] if 'instance' in keys and keys['instance']: instance = keys['instance'] property_dct = {} @@ -423,11 +454,21 @@ class RouteAdminForm(forms.ModelForm): subcategories = keys.pop('subcategories') \ if 'subcategories' in keys else [] super(RouteAdminForm, self).__init__(*args, **keys) + if not settings.CHIMERE_SEARCH_ENGINE and 'keywords' in self.fields: + self.fields.pop('keywords') 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 + # not a clean way to filter properties... + # to do: change creation process + pms = [pm.getNamedId() for pm in self.pms] + for k in self.fields.keys(): + if not k.startswith('property_') or \ + k in pms: + continue + self.fields.pop(k) def save(self, *args, **keys): """ |