diff options
-rw-r--r-- | chimere/main/models.py | 17 | ||||
-rw-r--r-- | chimere/main/views.py | 10 | ||||
-rw-r--r-- | chimere/templates/edit.html | 24 |
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> |