X-Git-Url: https://code.kerkeslager.com/?p=climbing.kerkeslager.com;a=blobdiff_plain;f=src%2Fclimbing%2Fmodels.py;h=14c728e7d9e0bd25f390aade9770f47f77f763da;hp=62507adbb94f10bd2eacb76ed0a6c163c6da8714;hb=af1a3a283688e74a6e7868395cf2a507dcd2e0f4;hpb=6b6f260d50d41253bd01f99bec0fd49b6f971924 diff --git a/src/climbing/models.py b/src/climbing/models.py index 62507ad..14c728e 100644 --- a/src/climbing/models.py +++ b/src/climbing/models.py @@ -1,5 +1,5 @@ -from django.db import models from django.contrib.auth.models import User +from django.db import models class Area(models.Model): name = models.CharField(max_length=64) @@ -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,