X-Git-Url: https://code.kerkeslager.com/?p=climbing.kerkeslager.com;a=blobdiff_plain;f=src%2Fclimbing%2Fmodels.py;h=8be6ee950b3761f1a6fc37cabd3f25d7719b60ae;hp=62507adbb94f10bd2eacb76ed0a6c163c6da8714;hb=d468f7a76724652dab912b13ee9242d9b220d961;hpb=6b6f260d50d41253bd01f99bec0fd49b6f971924 diff --git a/src/climbing/models.py b/src/climbing/models.py index 62507ad..8be6ee9 100644 --- a/src/climbing/models.py +++ b/src/climbing/models.py @@ -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,