5 from django.db import models |
5 from django.db import models |
6 from django.utils.translation import ugettext_lazy as _ |
6 from django.utils.translation import ugettext_lazy as _ |
7 |
7 |
8 |
8 |
9 class User(AbstractUser): |
9 class User(AbstractUser): |
|
10 |
10 class Meta: |
11 class Meta: |
11 verbose_name = _('User') |
12 verbose_name = _('User') |
12 verbose_name_plural = _('Users') |
13 verbose_name_plural = _('Users') |
13 |
14 |
14 |
15 |
15 class UserProfile(models.Model): |
16 class UserProfile(models.Model): |
16 user = models.OneToOneField(User, on_delete=models.CASCADE) |
17 user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile') |
|
18 |
|
19 # TODO: |
|
20 default_group = models.ForeignKey( |
|
21 Group, |
|
22 null=False, |
|
23 verbose_name=_("UserProfile|default_group")) |
17 |
24 |
18 class Meta: |
25 class Meta: |
19 verbose_name = _('UserProfile') |
26 verbose_name = _('UserProfile') |
20 verbose_name_plural = _('UserProfiles') |
27 verbose_name_plural = _('UserProfiles') |
21 |
28 |
24 group = models.OneToOneField( |
31 group = models.OneToOneField( |
25 Group, unique=True, on_delete=models.CASCADE, related_name='profile') |
32 Group, unique=True, on_delete=models.CASCADE, related_name='profile') |
26 description = models.TextField(null=True, blank=True) |
33 description = models.TextField(null=True, blank=True) |
27 # TODO: manage when user is deleted: put first user as owner. delete group if empty |
34 # TODO: manage when user is deleted: put first user as owner. delete group if empty |
28 owner = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) |
35 owner = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) |
|
36 # TODO: can not delete group when user is not deleted. |
|
37 # TODO: other users cannot set as owner |
|
38 # TODO: delete personal group when user is deleted |
|
39 # TODO: change group name when user change name |
|
40 # indicate that this group is a personal group. |
|
41 # used this instead of a boolean because it allows to easily enforce that a user has only one personal group |
|
42 owner_personal = models.OneToOneField(User, on_delete=models.CASCADE, null=True, related_name='personal_group') |
|
43 |
|
44 @property |
|
45 def is_personal(self): |
|
46 return self.owner == self.owner_personal |
29 |
47 |
30 class Meta: |
48 class Meta: |
31 verbose_name = _('GroupProfile') |
49 verbose_name = _('GroupProfile') |
32 verbose_name_plural = _('GroupProfiles') |
50 verbose_name_plural = _('GroupProfiles') |