You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

74 lines
2.3 KiB

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, AbstractUser
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.models import Group
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 PerformUserManager(models.Manager):
def get_queryset(self):
return super(PerformUserManager, self).get_queryset().filter(groups__name='Исполнитель')
class CustomerUserManager(models.Manager):
def get_queryset(self):
return super(CustomerUserManager, self).get_queryset().filter(groups__name='Заказчик')
class User(AbstractBaseUser, PermissionsMixin):
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)
@property
def is_staff(self):
return self.is_superuser
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()
perform_objects = PerformUserManager()
customers_objects = CustomerUserManager()
class Meta:
verbose_name = 'Пользователь'
verbose_name_plural = 'Пользователи'
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', null=True)
def __str__(self):
return self.name
class Meta:
verbose_name = 'Команда'
verbose_name_plural = 'Команды'