Some nicer display logic
[climbing.kerkeslager.com] / src / user_profile / models.py
1 from django.contrib.auth.models import User
2 from django.db import models
3 from django.db.models.signals import post_save
4 from django.dispatch import receiver
5
6 from core import utils
7
8 class UserProfile(models.Model):
9     user = models.OneToOneField(
10         User,
11         on_delete=models.CASCADE,
12         related_name='profile',
13     )
14     notes = models.TextField(blank=True, null=True)
15
16     def __str__(self):
17         return self.user.username
18
19     @property
20     def todos(self):
21         return utils.merge(
22             self.user.boulder_todos.order_by('name'),
23             self.user.route_todos.order_by('name'),
24             'name',
25         )
26
27 @receiver(post_save, sender=User)
28 def create_profile(sender, instance, **kwargs):
29     profile, created = UserProfile.objects.get_or_create(user=instance)