summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/main/models.py17
-rw-r--r--chimere/main/views.py10
-rw-r--r--chimere/templates/edit.html24
3 files changed, 29 insertions, 22 deletions
diff --git a/chimere/main/models.py b/chimere/main/models.py
index 283ae1d..710623c 100644
--- a/chimere/main/models.py
+++ b/chimere/main/models.py
@@ -110,18 +110,22 @@ class SubCategory(models.Model):
verbose_name = _("Subcategory")
@classmethod
- def getAvailable(cls, item_types=None):
+ def getAvailable(cls, item_types=None, area_name=None):
'''Get list of tuples with first the category and second the associated
subcategories
'''
sub_categories = {}
subcategories = None
+ subcategories = cls.objects.filter(category__available=True)
if not item_types:
- subcategories = cls.objects.filter(category__available=True,
- available=True)
+ subcategories = subcategories.filter(available=True)
else:
- subcategories = cls.objects.filter(category__available=True,
- item_type__in=item_types)
+ subcategories = subcategories.filter(item_type__in=item_types)
+ if area_name:
+ area = Area.objects.get(urn=area_name)
+ if area.subcategories.count():
+ sub_ids = [sub.id for sub in area.subcategories.all()]
+ subcategories = subcategories.filter(id__in=sub_ids)
for sub_category in subcategories:
if sub_category.category not in sub_categories:
sub_categories[sub_category.category] = []
@@ -336,7 +340,8 @@ class Area(models.Model, SimpleArea):
"""Rectangular area of the map
"""
name = models.CharField(_("Name"), max_length=150)
- urn = models.CharField(_("Area urn"), max_length=100, blank=True)
+ urn = models.SlugField(_("Area urn"), max_length=50, blank=True,
+ unique=True)
subcategories = ManyToManyField_NoSyncdb(SubCategory,
related_name='subcategories', blank=True, null=True,
db_table=u'subcategory_areas')
diff --git a/chimere/main/views.py b/chimere/main/views.py
index fc5e4c4..e6e37c2 100644
--- a/chimere/main/views.py
+++ b/chimere/main/views.py
@@ -52,7 +52,7 @@ def get_base_response(area_name=""):
base_url = '/' + area_name + base_url
base_response_dct['extra_url'] = base_url
base_response_dct['area_name'] = area_name
- if settings.CSS_AREAS:
+ if settings.CSS_AREAS and area_name:
base_response_dct['css_area'] = area_name + ".css"
base_response_dct['area_name'] = area_name
return base_response_dct
@@ -131,10 +131,11 @@ def edit(request, area_name=""):
'map_layer':settings.MAP_LAYER,
'form':form,
'extra_head':form.media,
- 'sub_categories':SubCategory.getAvailable(['M', 'B']),
+ 'sub_categories':SubCategory.getAvailable(['M', 'B'],
+ area_name),
'point_widget':PointChooserWidget().render('point', None,
area_name=area_name),
- 'properties':declared_fields
+ 'properties':declared_fields,
})
# manualy populate the custom widget
if 'subcategory' in form.data and form.data['subcategory']:
@@ -170,7 +171,8 @@ def editRoute(request, area_name=""):
'map_layer':settings.MAP_LAYER,
'form':form,
'extra_head':form.media,
- 'sub_categories':SubCategory.getAvailable(['R', 'B']),
+ 'sub_categories':SubCategory.getAvailable(['R', 'B'],
+ area_name),
'route_widget':RouteChooserWidget().render('route', None,
area_name=area_name),
'properties':declared_fields
diff --git a/chimere/templates/edit.html b/chimere/templates/edit.html
index 6fc25b9..0e1f6d7 100644
--- a/chimere/templates/edit.html
+++ b/chimere/templates/edit.html
@@ -15,18 +15,18 @@
{{ form.name }}
</div>
<div class="fieldWrapper">
- <label for="id_subcategory">{% trans "Category" %} *</label>
- {{ form.subcategory.errors }}
- <select name='subcategory' id='subcategory'>
- <option value="">---------</option>
- {% for cat_subcat in sub_categories %}
- <optgroup label="{{cat_subcat.0.name}}">
- {% for sub_category in cat_subcat.1 %}
- <option value='{{sub_category.id}}'{% ifequal sub_category.id current_category %} selected='selected'{% endifequal %}>
- {% trans sub_category.name %}
- </option>{% endfor %}
- </optgroup>{% endfor %}
- </select>
+ <label for="id_subcategory">{% trans "Category" %} *</label>
+ {{ form.subcategory.errors }}
+ <select name='subcategory' id='subcategory'>
+ <option value="">---------</option>
+ {% for cat_subcat in sub_categories %}
+ <optgroup label="{{cat_subcat.0.name}}">
+ {% for sub_category in cat_subcat.1 %}
+ <option value='{{sub_category.id}}'{% ifequal sub_category.id current_category %} selected='selected'{% endifequal %}>
+ {% trans sub_category.name %}
+ </option>{% endfor %}
+ </optgroup>{% endfor %}
+ </select>
</div>
<div class="fieldWrapper">
<label for="id_point">{% trans "Point"%} *</label>