('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)
max_length=8,
)
name = models.CharField(blank=True, max_length=32)
+ notes = models.TextField(blank=True)
class Meta:
ordering = ('order',)
)
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
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)
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')