1 from django.db import models
2 from django.contrib.auth.models import User
4 class Area(models.Model):
5 name = models.CharField(max_length=64)
6 notes = models.TextField(blank=True, null=True)
11 class Crag(models.Model):
12 area = models.ForeignKey(
14 on_delete=models.CASCADE,
17 name = models.CharField(max_length=64)
18 notes = models.TextField(blank=True, null=True)
23 class Route(models.Model):
24 area = models.ForeignKey(
26 on_delete=models.CASCADE,
27 related_name='routes',
29 name = models.CharField(max_length=64)
30 notes = models.TextField(blank=True, null=True)
35 ROUTE_DIFFICULTY_CHOICES = (
85 class Pitch(models.Model):
86 route = models.ForeignKey(
88 on_delete=models.CASCADE,
89 related_name='pitches',
91 name = models.CharField(max_length=64, null=True)
92 difficulty = models.CharField(max_length=5, choices=ROUTE_DIFFICULTY_CHOICES)
93 safety = models.CharField(max_length=4, choices=SAFETY_CHOICES)
94 notes = models.TextField(blank=True, null=True)
98 return '{} ({})'.format(self.name, self.difficulty)
99 return 'Pitch ({})'.format(self.difficulty)
101 class Cluster(models.Model):
102 area = models.ForeignKey(
104 on_delete=models.CASCADE,
105 related_name='clusters',
107 name = models.CharField(max_length=64)
108 notes = models.TextField(blank=True, null=True)
113 class Boulder(models.Model):
114 cluster = models.ForeignKey(
116 on_delete=models.CASCADE,
117 related_name='boulders',
119 name = models.CharField(max_length=64)
120 notes = models.TextField(blank=True, null=True)
125 BOULDER_DIFFICULTY_CHOICES = (
146 class Problem(models.Model):
147 boulder = models.ForeignKey(
149 on_delete=models.CASCADE,
150 related_name='problems',
152 name = models.CharField(max_length=64)
153 difficulty = models.CharField(max_length=3, choices=BOULDER_DIFFICULTY_CHOICES)
154 safety = models.CharField(max_length=4, choices=SAFETY_CHOICES)
155 notes = models.TextField(blank=True, null=True)
158 return '{} ({})'.format(self.name, self.difficulty)
160 class RouteTodo(models.Model):
161 user = models.ForeignKey(User, on_delete=models.CASCADE)
162 route = models.ForeignKey(Route, on_delete=models.CASCADE)
164 class ProblemTodo(models.Model):
165 user = models.ForeignKey(User, on_delete=models.CASCADE)
166 problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
168 class RouteTick(models.Model):
169 user = models.ForeignKey(User, on_delete=models.CASCADE)
170 route = models.ForeignKey(Route, on_delete=models.CASCADE)
171 timestamp = models.DateTimeField()
172 notes = models.TextField(blank=True, null=True)
174 class ProblemTick(models.Model):
175 user = models.ForeignKey(User, on_delete=models.CASCADE)
176 problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
177 timestamp = models.DateTimeField()
178 notes = models.TextField(blank=True, null=True)