summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit1af69d67f354b62cafdd49b9b4d4453c6b5354b1 (patch)
tree348340661a466900161376d81300eb0500848102
parent58c181b8792466834512c85f8f19b8daf1d79c2d (diff)
downloadChimère-1af69d67f354b62cafdd49b9b4d4453c6b5354b1.tar.bz2
Chimère-1af69d67f354b62cafdd49b9b4d4453c6b5354b1.zip
Forms: do not choose between categories if only one is available
-rw-r--r--chimere/forms.py9
-rw-r--r--chimere/models.py2
-rw-r--r--chimere/templates/chimere/edit.html2
-rw-r--r--chimere/views.py14
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