diff options
Diffstat (limited to 'chimere/forms.py')
-rw-r--r-- | chimere/forms.py | 75 |
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: |