from datetime import datetime from django.db import models from django.utils import timezone from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, AbstractUser, Group, PermissionsMixin from specializations.models import Specialization class UserManager(BaseUserManager): def create_user(self, email, password=None): if not email: raise ValueError('Users must have an email address') user = self.model(email=UserManager.normalize_email(email),) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, email, password): user = self.create_user(email, password) user.is_superuser = True user.save(using=self._db) return user class ContractorUserManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(groups__name='Исполнители') class CustomerUserManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(groups__name='Заказчики') class User(AbstractBaseUser, PermissionsMixin): STATUSES = ( ('free', 'Свободен'), ('busy', 'Занят'), ) nickname = models.CharField(max_length=50, blank=True,null=True) first_name = models.CharField(max_length=255, blank=True) last_name = models.CharField(max_length=255, blank=True) email = models.EmailField(max_length=255, unique=True, db_index=True) is_active = models.BooleanField(default=True) created = models.DateTimeField(default=timezone.now) last_time_visit = models.DateTimeField(default=timezone.now) contractor_specializations = models.ManyToManyField(Specialization, related_name='contractors', blank=True) contractor_status = models.CharField(default='free', max_length=20, choices=STATUSES) @property def is_staff(self): return self.is_superuser @property def is_free(self): return self.contractor_status == 'free' def __str__(self): return self.email def get_short_name(self): return self.email def get_full_name(self): return self.first_name + ' ' + self.last_name USERNAME_FIELD = 'email' REQUIRED_FIELDS = [] objects = UserManager() contractor_objects = ContractorUserManager() customer_objects = CustomerUserManager() class Meta: verbose_name = 'Пользователь' verbose_name_plural = 'Пользователи' def is_contractor(self): return self.groups.filter(name='Исполнители').exists() def is_customer(self): return self.groups.filter(name='Заказчики').exists() class Team(models.Model): name = models.CharField(max_length=255) users = models.ManyToManyField(User, related_name ='teams', blank=True) owner = models.OneToOneField(User, related_name='team', blank=True, null=True) # groups = models.ManyToManyField(Group, related_name='teams', blank=True) def __str__(self): return self.name class Meta: verbose_name = 'Команда' verbose_name_plural = 'Команды'