from django.db import models from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType from adhesions.models import Adherent, Corporation class Profile(models.Model): user = models.OneToOneField(User, related_name='profile', verbose_name='Utilisateur') phone_number = models.CharField(max_length=16, blank=True, default='', verbose_name='Numéro de téléphone') address = models.TextField(blank=True, default='', verbose_name='Adresse') class Meta: verbose_name = 'profil' @property def adhesion(self): # user adhesion ctype = ContentType.objects.get_for_model(User) try: return Adherent.objects.get(adherent_type=ctype, adherent_id=self.user.pk) except Adherent.DoesNotExist: return None @property def adhesions(self): # user and corporations (for which the user is a member) adhesions user_type = ContentType.objects.get_for_model(User) corp_type = ContentType.objects.get_for_model(Corporation) return Adherent.objects.filter( models.Q(adherent_type=user_type, adherent_id=self.user.pk) | models.Q(adherent_type=corp_type, adherent_id__in=Corporation.objects.filter(members=self.user).values_list('pk')) ) def __str__(self): return self.user.get_full_name() or self.user.username