From 9f1f8c78baf7299181c9b5e884dbf379bb1b1446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sat, 10 Jun 2017 23:04:28 +0200 Subject: [PATCH] navigate to secondary sections --- .../editor/templates/editor/section.html | 29 +++++++++++++++++-- src/c3nav/editor/views.py | 17 ++++++----- src/c3nav/mapdata/models/section.py | 4 +++ 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/c3nav/editor/templates/editor/section.html b/src/c3nav/editor/templates/editor/section.html index 78d60e78..dc2548f4 100644 --- a/src/c3nav/editor/templates/editor/section.html +++ b/src/c3nav/editor/templates/editor/section.html @@ -6,9 +6,34 @@ {% trans 'Section' as model_title %} {% blocktrans %}Edit {{ model_title }}{% endblocktrans %} -

{{ section.title }}

+

+ {{ section.title }} + {% if section.on_top_of != None %} + {% with section.on_top_of.title as on_top_of_section_title %} + {% blocktrans %}on top of {{ on_top_of_section_title }}{% endblocktrans %} + {% endwith %} + {% endif %} +

- « {% trans 'back to overview' %} + {% if section.on_top_of == None %} + « {% trans 'back to overview' %} + {% else %} + « {% trans 'back to parent section' %} + {% endif %}

{% include 'editor/fragment_child_models.html' %} + +{% if section.on_top_of == None %} + + {% blocktrans %}New {{ model_title }}{% endblocktrans %} + +

{% trans 'Sections on top' %}

+
+{% for s in sections_on_top %} + + {{ s.title }} + +{% endfor %} +
+{% endif %} diff --git a/src/c3nav/editor/views.py b/src/c3nav/editor/views.py index dbbc3604..e5afc439 100644 --- a/src/c3nav/editor/views.py +++ b/src/c3nav/editor/views.py @@ -39,7 +39,7 @@ def child_model(model_name, kwargs=None, parent=None): @sidebar_view def main_index(request): return render(request, 'editor/index.html', { - 'sections': Section.objects.filter(on_top_of__isnull=True), + 'sections': Section.objects.all(), 'child_models': [ child_model('LocationGroup'), child_model('Source'), @@ -49,17 +49,18 @@ def main_index(request): @sidebar_view def section_detail(request, pk): - section = get_object_or_404(Section, pk=pk) + section = get_object_or_404(Section.objects.select_related('on_top_of'), pk=pk) return render(request, 'editor/section.html', { - 'sections': Section.objects.filter(on_top_of__isnull=True), + 'sections': Section.objects.all(), 'section': section, 'section_url': 'editor.sections.detail', 'section_as_pk': True, 'child_models': [child_model(model_name, kwargs={'section': pk}, parent=section) for model_name in ('Building', 'Space', 'Door')], - 'geometry_url': '/api/editor/geometries/?section='+pk, + 'sections_on_top': section.sections_on_top.all(), + 'geometry_url': '/api/editor/geometries/?section='+str(section.primary_section_pk), }) @@ -121,7 +122,7 @@ def edit(request, pk=None, model=None, section=None, space=None, explicit_edit=F }) if not new: ctx.update({ - 'geometry_url': '/api/editor/geometries/?section='+pk, + 'geometry_url': '/api/editor/geometries/?section='+str(section.primary_section_pk), }) elif model == Space and not new: ctx.update({ @@ -133,7 +134,7 @@ def edit(request, pk=None, model=None, section=None, space=None, explicit_edit=F ctx.update({ 'section': section, 'back_url': reverse('editor.spaces.list', kwargs={'section': section.pk}), - 'geometry_url': '/api/editor/geometries/?section='+str(section.pk), + 'geometry_url': '/api/editor/geometries/?section='+str(section.primary_section_pk), }) elif hasattr(model, 'section'): if obj: @@ -141,7 +142,7 @@ def edit(request, pk=None, model=None, section=None, space=None, explicit_edit=F ctx.update({ 'section': section, 'back_url': reverse('editor.'+related_name+'.list', kwargs={'section': section.pk}), - 'geometry_url': '/api/editor/geometries/?section='+str(section.pk), + 'geometry_url': '/api/editor/geometries/?section='+str(section.primary_section_pk), }) elif hasattr(model, 'space'): if obj: @@ -247,7 +248,7 @@ def list_objects(request, model=None, section=None, space=None, explicit_edit=Fa 'sections': Section.objects.all(), 'section': section, 'section_url': request.resolver_match.url_name, - 'geometry_url': '/api/editor/geometries/?section='+str(section.pk), + 'geometry_url': '/api/editor/geometries/?section='+str(section.primary_section_pk), }) elif space is not None: reverse_kwargs['space'] = space diff --git a/src/c3nav/mapdata/models/section.py b/src/c3nav/mapdata/models/section.py index a641d153..e7aa6948 100644 --- a/src/c3nav/mapdata/models/section.py +++ b/src/c3nav/mapdata/models/section.py @@ -36,6 +36,10 @@ class Section(SpecificLocation, EditorFormMixin, models.Model): raise TypeError return Section.objects.filter(altitude__gt=self.altitude, on_top_of__isnull=True).order_by('altitude') + @property + def primary_section_pk(self): + return self.pk if self.on_top_of_id is None else self.on_top_of_id + def _serialize(self, section=True, **kwargs): result = super()._serialize(**kwargs) result['altitude'] = float(str(self.altitude))