diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-26 17:24:35 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-26 17:24:35 +0200 |
commit | 1af69d67f354b62cafdd49b9b4d4453c6b5354b1 (patch) | |
tree | 348340661a466900161376d81300eb0500848102 | |
parent | 58c181b8792466834512c85f8f19b8daf1d79c2d (diff) | |
download | Chimère-1af69d67f354b62cafdd49b9b4d4453c6b5354b1.tar.bz2 Chimère-1af69d67f354b62cafdd49b9b4d4453c6b5354b1.zip |
Forms: do not choose between categories if only one is available
-rw-r--r-- | chimere/forms.py | 9 | ||||
-rw-r--r-- | chimere/models.py | 2 | ||||
-rw-r--r-- | chimere/templates/chimere/edit.html | 2 | ||||
-rw-r--r-- | chimere/views.py | 14 |
4 files changed, 20 insertions, 7 deletions
diff --git a/chimere/forms.py b/chimere/forms.py index 580fb09..74b7aa0 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -296,6 +296,15 @@ class MarkerAdminFormBase(forms.ModelForm): 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 + self.fields['categories'].label = "" + if (len(self.fields['categories'].choices) == 1): + self.fields['categories'].widget = forms.MultipleHiddenInput() + choices = self.fields['categories'].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]] if not settings.CHIMERE_SEARCH_ENGINE and 'keywords' in self.fields: self.fields.pop('keywords') if not settings.CHIMERE_DAYS_BEFORE_EVENT: diff --git a/chimere/models.py b/chimere/models.py index ddeeefd..25b599b 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -1853,6 +1853,8 @@ class PropertyModel(models.Model): @classmethod def getAvailable(cls, area_name=None): + if area_name and area_name.endswith('/'): + area_name = area_name[:-1] q = cls.objects.filter(available=True) if not area_name: return q.annotate(Count('areas')).filter(areas__count=0) diff --git a/chimere/templates/chimere/edit.html b/chimere/templates/chimere/edit.html index 593ebdf..ab5bb4b 100644 --- a/chimere/templates/chimere/edit.html +++ b/chimere/templates/chimere/edit.html @@ -39,7 +39,7 @@ <div class='leftform'> <p>* {% trans "indicates a mandatory field" %}</p> <div class="fieldWrapper full"> - <label for="id_subcategory">{% trans "Categories" %} *</label> + <label for="id_subcategory">{% if form.categories.label %}{{ form.categories.label }}{% else %}{% trans "Categories" %} *{% endif %}</label> {% if form.categories.errors %}<div class='errors'>{{ form.categories.errors }}</div>{% endif %} {{ form.categories }} </div> diff --git a/chimere/views.py b/chimere/views.py index 8c2c52c..9281e8d 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -344,10 +344,9 @@ def edit(request, area_name="", item_id=None, submited=False): item_id, init_item, response_dct, form, formset_multi, formset_picture = \ values # get the "manualy" declared_fields. Ie: properties - declared_fields = form.declared_fields.keys() - declared_fields = PropertyModel.objects.filter(available=True).all() - filtered_properties = PropertyModel.objects.filter( - available=True, subcategories__id__isnull=False).all() + declared_fields = PropertyModel.getAvailable(area_name=area_name) + filtered_properties = declared_fields.filter( + subcategories__id__isnull=False).all() point_value = init_item.point if init_item else None if request.POST and request.POST.get('point'): point_value = request.POST.get('point') @@ -495,14 +494,16 @@ def editPolygon(request, area_name="", item_id=None, submited=False): Polygon edition page """ response, values, sub_categories = get_edit_polygon(request, area_name, - item_id, ['R', 'B']) + item_id, ['P']) if response: return response item_id, init_item, response_dct, form, formset_multi, formset_picture = \ values # get the "manualy" declared_fields. Ie: properties - declared_fields = form.declared_fields.keys() + declared_fields = PropertyModel.getAvailable(area_name=area_name) + filtered_properties = declared_fields.filter( + subcategories__id__isnull=False).all() polygon_value = init_item.polygon if init_item else None if request.POST and request.POST.get('polygon'): polygon_value = request.POST.get('polygon') @@ -520,6 +521,7 @@ def editPolygon(request, area_name="", item_id=None, submited=False): 'polygon_widget': PolygonChooserWidget().render( 'polygon', polygon_value, area_name=response_dct['area_name'],), 'properties': declared_fields, + 'filtered_properties': filtered_properties, 'submited': submited }) # manualy populate the custom widget |