models.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from django.db import models
  2. from django.contrib.auth.models import User
  3. from django.contrib.contenttypes.models import ContentType
  4. from django.urls import reverse
  5. from adhesions.models import Adhesion, Corporation
  6. class Profile(models.Model):
  7. user = models.OneToOneField(User, related_name='profile', verbose_name='Utilisateur')
  8. phone_number = models.CharField(max_length=16, blank=True, default='',
  9. verbose_name='Numéro de téléphone')
  10. address = models.TextField(blank=True, default='', verbose_name='Adresse')
  11. notes = models.TextField(blank=True, default='')
  12. class Meta:
  13. verbose_name = 'profil'
  14. @property
  15. def adhesion(self): # user adhesion
  16. ctype = ContentType.objects.get_for_model(User)
  17. try:
  18. return Adhesion.objects.get(adherent_type=ctype, adherent_id=self.user.pk)
  19. except Adhesion.DoesNotExist:
  20. return None
  21. @property
  22. def adhesions(self): # user and corporations (for which the user is a member) adhesions
  23. user_type = ContentType.objects.get_for_model(User)
  24. corp_type = ContentType.objects.get_for_model(Corporation)
  25. return Adhesion.objects.filter(
  26. models.Q(adherent_type=user_type, adherent_id=self.user.pk)
  27. | models.Q(adherent_type=corp_type, adherent_id__in=Corporation.objects.filter(members=self.user).values_list('pk'))
  28. )
  29. def get_absolute_url(self):
  30. return reverse('user-detail', kwargs={'pk': self.user.pk})
  31. def __str__(self):
  32. return self.user.get_full_name() or self.user.username