1 from django.contrib.auth.models import User
2 from django.db import models
6 class Area(models.Model):
7 name = models.CharField(max_length=64)
8 notes = models.TextField(blank=True, null=True)
16 self.crags.order_by('name'),
17 self.clusters.order_by('name'),
21 class Crag(models.Model):
22 area = models.ForeignKey(
24 on_delete=models.CASCADE,
27 name = models.CharField(max_length=64)
28 notes = models.TextField(blank=True, null=True)
33 class Route(models.Model):
34 area = models.ForeignKey(
36 on_delete=models.CASCADE,
37 related_name='routes',
39 name = models.CharField(max_length=64)
40 mountain_project = models.URLField(blank=True, null=True)
41 notes = models.TextField(blank=True, null=True)
46 ROUTE_DIFFICULTY_CHOICES = (
96 class Pitch(models.Model):
97 route = models.ForeignKey(
99 on_delete=models.CASCADE,
100 related_name='pitches',
102 name = models.CharField(max_length=64, null=True)
103 difficulty = models.CharField(max_length=5, choices=ROUTE_DIFFICULTY_CHOICES)
104 safety = models.CharField(max_length=4, choices=SAFETY_CHOICES)
105 notes = models.TextField(blank=True, null=True)
109 return '{} ({})'.format(self.name, self.difficulty)
110 return 'Pitch ({})'.format(self.difficulty)
112 class Cluster(models.Model):
113 area = models.ForeignKey(
115 on_delete=models.CASCADE,
116 related_name='clusters',
118 name = models.CharField(max_length=64)
119 notes = models.TextField(blank=True, null=True)
124 class Boulder(models.Model):
125 cluster = models.ForeignKey(
127 on_delete=models.CASCADE,
128 related_name='boulders',
130 name = models.CharField(max_length=64)
131 notes = models.TextField(blank=True, null=True)
136 BOULDER_DIFFICULTY_CHOICES = (
157 class Problem(models.Model):
158 boulder = models.ForeignKey(
160 on_delete=models.CASCADE,
161 related_name='problems',
163 name = models.CharField(max_length=64)
164 difficulty = models.CharField(max_length=3, choices=BOULDER_DIFFICULTY_CHOICES)
165 safety = models.CharField(max_length=4, choices=SAFETY_CHOICES)
166 mountain_project = models.URLField(blank=True, null=True)
167 notes = models.TextField(blank=True, null=True)
170 return '{} ({})'.format(self.name, self.difficulty)
172 class RouteTodo(models.Model):
173 user = models.ForeignKey(User, on_delete=models.CASCADE)
174 route = models.ForeignKey(Route, on_delete=models.CASCADE)
176 class ProblemTodo(models.Model):
177 user = models.ForeignKey(User, on_delete=models.CASCADE)
178 problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
180 class RouteTick(models.Model):
181 user = models.ForeignKey(User, on_delete=models.CASCADE)
182 route = models.ForeignKey(Route, on_delete=models.CASCADE)
183 timestamp = models.DateTimeField()
184 notes = models.TextField(blank=True, null=True)
186 class ProblemTick(models.Model):
187 user = models.ForeignKey(User, on_delete=models.CASCADE)
188 problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
189 timestamp = models.DateTimeField()
190 notes = models.TextField(blank=True, null=True)