1693a0592ce6b8ce74efe20602f82cba7e5cfbd5
[climbing.kerkeslager.com] / src / climbing / models.py
1 from django.db import models
2
3 class Area(models.Model):
4     name = models.CharField(max_length=64)
5     notes = models.TextField()
6
7 class Crag(models.Model):
8     area = models.ForeignKey(
9         Area,
10         on_delete=models.CASCADE,
11         related_name='crags',
12     )
13     name = models.CharField(max_length=64)
14     notes = models.TextField()
15
16 class Route(models.Model):
17     area = models.ForeignKey(
18         Crag,
19         on_delete=models.CASCADE,
20         related_name='routes',
21     )
22     name = models.CharField(max_length=64)
23     notes = models.TextField()
24
25 ROUTE_DIFFICULTY_CHOICES = (
26     ('5.0', '5.0'),
27     ('5.1', '5.1'),
28     ('5.2', '5.2'),
29     ('5.3', '5.3'),
30     ('5.4', '5.4'),
31     ('5.5', '5.5'),
32     ('5.6', '5.6'),
33     ('5.6+', '5.6+'),
34     ('5.7', '5.7'),
35     ('5.7+', '5.7+'),
36     ('5.8', '5.8'),
37     ('5.8+', '5.8+'),
38     ('5.9-', '5.9-'),
39     ('5.9', '5.9'),
40     ('5.9+', '5.9+'),
41     ('5.10a', '5.10a'),
42     ('5.10b', '5.10b'),
43     ('5.10c', '5.10c'),
44     ('5.10d', '5.10d'),
45     ('5.11a', '5.11a'),
46     ('5.11b', '5.11b'),
47     ('5.11c', '5.11c'),
48     ('5.11d', '5.11d'),
49     ('5.12a', '5.12a'),
50     ('5.12b', '5.12b'),
51     ('5.12c', '5.12c'),
52     ('5.12d', '5.12d'),
53     ('5.13a', '5.13a'),
54     ('5.13b', '5.13b'),
55     ('5.13c', '5.13c'),
56     ('5.13d', '5.13d'),
57     ('5.14a', '5.14a'),
58     ('5.14b', '5.14b'),
59     ('5.14c', '5.14c'),
60     ('5.14d', '5.14d'),
61     ('5.15a', '5.15a'),
62     ('5.15b', '5.15b'),
63     ('5.15c', '5.15c'),
64     ('5.15d', '5.15d'),
65 )
66
67 SAFETY_CHOICES = (
68     ('G', 'G'),
69     ('PG', 'PG'),
70     ('PG13', 'PG13'),
71     ('R', 'R'),
72     ('X', 'X'),
73 )
74
75 class Pitch(models.Model):
76     route = models.ForeignKey(
77         Route,
78         on_delete=models.CASCADE,
79         related_name='pitches',
80     )
81     name = models.CharField(max_length=64, null=True)
82     difficulty = models.CharField(max_length=5, choices=ROUTE_DIFFICULTY_CHOICES)
83     safety = models.CharField(max_length=4, choices=SAFETY_CHOICES)
84     notes = models.TextField()
85
86 class Cluster(models.Model):
87     area = models.ForeignKey(
88         Area,
89         on_delete=models.CASCADE,
90         related_name='clusters',
91     )
92     name = models.CharField(max_length=64)
93     notes = models.TextField()
94
95 class Boulder(models.Model):
96     cluster = models.ForeignKey(
97         Cluster,
98         on_delete=models.CASCADE,
99         related_name='boulders',
100     )
101     name = models.CharField(max_length=64)
102     notes = models.TextField()
103
104 BOULDER_DIFFICULTY_CHOICES = (
105     ('V0', 'V0'),
106     ('V1', 'V1'),
107     ('V2', 'V2'),
108     ('V3', 'V3'),
109     ('V4', 'V4'),
110     ('V5', 'V5'),
111     ('V6', 'V6'),
112     ('V7', 'V7'),
113     ('V8', 'V8'),
114     ('V9', 'V9'),
115     ('V10', 'V10'),
116     ('V11', 'V11'),
117     ('V12', 'V12'),
118     ('V13', 'V13'),
119     ('V14', 'V14'),
120     ('V15', 'V15'),
121     ('V16', 'V16'),
122     ('V17', 'V17'),
123 )
124
125 class Problem(models.Model):
126     boulder = models.ForeignKey(
127         Boulder,
128         on_delete=models.CASCADE,
129         related_name='problems',
130     )
131     name = models.CharField(max_length=64)
132     difficulty = models.CharField(max_length=3, choices=BOULDER_DIFFICULTY_CHOICES)
133     safety = models.CharField(max_length=4, choices=SAFETY_CHOICES)
134     notes = models.TextField()