diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-25 23:47:42 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-25 23:48:06 +0200 |
commit | eb49d9126ef91d39f238fe9fa19ee21490d5ef42 (patch) | |
tree | d88bc1570a5ecb8849ba14afb24a08f83b9cd9e4 /chimere/forms.py | |
parent | 26e85a9e32f900436d250d0f485300ce94c2efc1 (diff) | |
download | Chimère-eb49d9126ef91d39f238fe9fa19ee21490d5ef42.tar.bz2 Chimère-eb49d9126ef91d39f238fe9fa19ee21490d5ef42.zip |
Can now filter property models by area (db + forms)
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): """ |