+from django.contrib.auth.models import User
from django.db import models
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,
def __str__(self):
return '{} ({})'.format(self.name, self.difficulty)
+
+class RouteTodo(models.Model):
+ user = models.ForeignKey(User, on_delete=models.CASCADE)
+ route = models.ForeignKey(Route, on_delete=models.CASCADE)
+
+class ProblemTodo(models.Model):
+ user = models.ForeignKey(User, on_delete=models.CASCADE)
+ problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
+
+class RouteTick(models.Model):
+ user = models.ForeignKey(User, on_delete=models.CASCADE)
+ route = models.ForeignKey(Route, on_delete=models.CASCADE)
+ timestamp = models.DateTimeField()
+ notes = models.TextField(blank=True, null=True)
+
+class ProblemTick(models.Model):
+ user = models.ForeignKey(User, on_delete=models.CASCADE)
+ problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
+ timestamp = models.DateTimeField()
+ notes = models.TextField(blank=True, null=True)