summaryrefslogtreecommitdiff
path: root/chimere/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/forms.py')
-rw-r--r--chimere/forms.py75
1 files changed, 70 insertions, 5 deletions
diff --git a/chimere/forms.py b/chimere/forms.py
index 262ce76..599f88a 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -203,7 +203,7 @@ class ImporterAdminForm(forms.ModelForm):
model = Importer
widgets = {
'source': forms.TextInput(attrs={'size': 80}),
- 'filtr': forms.TextInput(attrs={'size': 80}),
+ 'filtr': forms.Textarea(attrs={'size': 80}),
}
def clean(self):
@@ -260,6 +260,8 @@ class MarkerAdminFormBase(forms.ModelForm):
"""
Main form for marker
"""
+ is_admin = True
+ name = forms.CharField(_(u"Name"), required=True)
description = forms.CharField(widget=TextareaAdminWidget, required=False)
class Meta:
@@ -269,7 +271,13 @@ 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')
+ querys = PropertyModel.getAvailable(area_name=area_name)
+ self.pms = []
+ for query in querys:
+ self.pms += [pm for pm in query.all()]
if 'instance' in keys and keys['instance']:
instance = keys['instance']
property_dct = {}
@@ -287,10 +295,41 @@ class MarkerAdminFormBase(forms.ModelForm):
if settings.CHIMERE_DAYS_BEFORE_EVENT:
self.fields['start_date'].widget = DatePickerWidget()
self.fields['end_date'].widget = DatePickerWidget()
+ if self.is_admin:
+ return
if subcategories:
self.fields['categories'].choices = subcategories
- elif hasattr(self, 'categories_choices'):
- self.fields['categories'].choices = self.categories_choices
+ # auto select if there is only one category
+ choices = list(self.fields['categories'].choices)
+ self.fields['categories'].choices = choices
+ self.fields['categories'].label = ""
+ if (len(choices) == 1):
+ self.fields['categories'].widget = forms.MultipleHiddenInput()
+ choices = list(self.fields['categories'].choices)
+ if type(choices[0][1]) in (list, tuple):
+ # hierarchical choices
+ self.fields['categories'].label = u"{} / {}".format(
+ choices[0][0], choices[0][1][0][1])
+ self.fields['categories'].initial = \
+ [self.fields['categories'].choices[0][1][0][0]]
+ else:
+ self.fields['categories'].label = u"{}".format(
+ choices[0][1])
+ self.fields['categories'].initial = \
+ [self.fields['categories'].choices[0][0]]
+ 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):
'''
@@ -378,6 +417,7 @@ class MarkerForm(MarkerBaseForm):
"""
Form for the edit page
"""
+ is_admin = False
ref_pk = forms.IntegerField(label=u" ", widget=forms.HiddenInput(),
required=False)
description = forms.CharField(widget=TextareaWidget, required=False)
@@ -396,6 +436,9 @@ class RouteAdminForm(forms.ModelForm):
"""
Main form for route
"""
+ is_admin = True
+ name = forms.CharField(_(u"Name"), required=True)
+
class Meta:
model = Route
@@ -403,6 +446,13 @@ 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')
+ querys = PropertyModel.getAvailable(area_name=area_name)
+ self.pms = []
+ for query in querys:
+ self.pms += [pm for pm in query.all()]
if 'instance' in keys and keys['instance']:
instance = keys['instance']
property_dct = {}
@@ -417,11 +467,24 @@ class RouteAdminForm(forms.ModelForm):
subcategories = keys.pop('subcategories') \
if 'subcategories' in keys else []
super(RouteAdminForm, self).__init__(*args, **keys)
+ if self.is_admin:
+ return
+ 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()
+ self.fields['categories'].choices = []
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):
"""
@@ -438,6 +501,7 @@ class RouteForm(RouteAdminForm):
"""
Form for the edit page
"""
+ is_admin = False
description = forms.CharField(widget=TextareaWidget, required=False)
point = forms.CharField(label=" ", required=False,
widget=forms.HiddenInput)
@@ -501,7 +565,7 @@ class RouteForm(RouteAdminForm):
return new_route
-class PolygonAdminForm(RouteAdminForm):
+class PolygonAdminForm(MarkerAdminForm):
"""
Main form for polygon
"""
@@ -513,6 +577,7 @@ class PolygonForm(PolygonAdminForm):
"""
Form for the edit page
"""
+ is_admin = False
description = forms.CharField(widget=TextareaWidget, required=False)
class Meta: