summaryrefslogtreecommitdiff
path: root/chimere/forms.py
diff options
context:
space:
mode:
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
commiteb49d9126ef91d39f238fe9fa19ee21490d5ef42 (patch)
treed88bc1570a5ecb8849ba14afb24a08f83b9cd9e4 /chimere/forms.py
parent26e85a9e32f900436d250d0f485300ce94c2efc1 (diff)
downloadChimè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.py47
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):
"""