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: | 
