Add areas
[tickle] / tickle / models.py
index ce395f9..eb661d1 100644 (file)
@@ -29,13 +29,31 @@ BOULDER_DIFFICULTY_CHOICES = (
     ('v16', 'v16'),
 )
 
+class Area(models.Model):
+    parent = models.ForeignKey(
+        'self',
+        blank=True,
+        null=True,
+        on_delete=models.CASCADE,
+    )
+    name = models.CharField(max_length=64)
+    notes = models.TextField(blank=True)
+
+    def __str__(self):
+        if self.parent is None:
+            return self.name
+
+        return '{} > {}'.format(self.parent, self.name)
+
 class Boulder(models.Model):
+    area = models.ForeignKey('Area', on_delete=models.PROTECT)
     name = models.CharField(max_length=64)
     difficulty = models.CharField(
         choices=BOULDER_DIFFICULTY_CHOICES,
         max_length=8,
     )
     mountainproject = models.URLField(blank=True)
+    notes = models.TextField(blank=True)
 
     def __str__(self):
         return '{} ({})'.format(self.name, self.difficulty)
@@ -94,6 +112,7 @@ class Pitch(models.Model):
         max_length=8,
     )
     name = models.CharField(blank=True, max_length=32)
+    notes = models.TextField(blank=True)
 
     class Meta:
         ordering = ('order',)
@@ -108,9 +127,11 @@ PROTECTION_STYLE_CHOICES = (
 )
 
 class Route(models.Model):
+    area = models.ForeignKey('Area', on_delete=models.PROTECT)
     name = models.CharField(max_length=64)
     protection_style = models.CharField(max_length=8, choices=PROTECTION_STYLE_CHOICES)
     mountainproject = models.URLField(blank=True)
+    notes = models.TextField(blank=True)
 
     # TODO Write test for this
     @property
@@ -136,7 +157,7 @@ PROTECTION_CHOICES = (
 class Attempt(models.Model):
     user = models.ForeignKey(User, on_delete=models.CASCADE)
     date = models.DateField()
-    notes = models.TextField()
+    notes = models.TextField(blank=True)
     boulder = models.ForeignKey('Boulder', null=True, on_delete=models.PROTECT, related_name='attempts')
     route = models.ForeignKey('Route', null=True, on_delete=models.PROTECT, related_name='attempts')
     result = models.CharField(max_length=8, choices=ATTEMPT_RESULT_CHOICES)
@@ -162,7 +183,7 @@ STYLE_CHOICES = (
 
 class Todo(models.Model):
     user = models.ForeignKey(User, on_delete=models.CASCADE)
-    notes = models.TextField()
+    notes = models.TextField(blank=True)
     protection = models.CharField(max_length=8, choices=PROTECTION_CHOICES)
     boulder = models.ForeignKey('Boulder', null=True, on_delete=models.PROTECT, related_name='todos')
     route = models.ForeignKey('Route', null=True, on_delete=models.PROTECT, related_name='todos')