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.
 
 
 
 
 
 

76 lines
2.5 KiB

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
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(ContractorUserManager, 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)
created = models.DateTimeField(default=timezone.now)
@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()
contractor_objects = ContractorUserManager()
customer_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', 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 = 'Команды'