Display sub-areas in the areas list
authorDavid Kerkeslager <kerkeslager@gmail.com>
Fri, 4 Mar 2022 15:02:17 +0000 (10:02 -0500)
committerDavid Kerkeslager <kerkeslager@gmail.com>
Fri, 4 Mar 2022 15:02:17 +0000 (10:02 -0500)
src/climbing/models.py
src/climbing/templates/climbing/area_list.html

index 62507ad..8be6ee9 100644 (file)
@@ -8,6 +8,49 @@ class Area(models.Model):
     def __str__(self):
         return self.name
 
+    @property
+    def sub_areas(self):
+        crags = iter(self.crags.order_by('name'))
+        clusters = iter(self.clusters.order_by('name'))
+
+        try:
+            crag = next(crags)
+        except StopIteration:
+            crag = None
+
+        try:
+            cluster = next(clusters)
+        except StopIteration:
+            cluster = None
+
+        while crag and cluster:
+            if crag.name < cluster.name:
+                yield crag
+                try:
+                    crag = next(crags)
+                except:
+                    crag = None
+            else:
+                yield cluster
+                try:
+                    cluster = next(clusters)
+                except:
+                    cluster = None
+
+        while crag:
+            yield crag
+            try:
+                crag = next(crags)
+            except:
+                crag = None
+
+        while cluster:
+            yield cluster
+            try:
+                cluster = next(clusters)
+            except:
+                cluster = None
+
 class Crag(models.Model):
     area = models.ForeignKey(
         Area,
index 02298ff..3946d24 100644 (file)
@@ -1,12 +1,25 @@
 {% extends 'core/base.html' %}
 
 {% block content %}
-  {% for object in object_list %}
-    <p>{{ object.name }}</p>
-    {% if not forloop.last %}
-      <hr/>
-    {% endif %}
-  {% empty %}
+  {% if object_list %}
+    <ul>
+      {% for area in object_list %}
+        <li>
+          {{ area.name }}
+
+          <ul>
+            {% for sa in area.sub_areas %}
+              <li>{{ sa.name }}</li>
+            {% endfor %}
+          </ul>
+
+          {% if not forloop.last %}
+            <hr/>
+          {% endif %}
+        </li>
+      {% endfor %}
+    </ul>
+  {% else %}
     <em>No areas found.</em>
-  {% endfor %}
+  {% endif %}
 {% endblock %}