from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, AbstractUser, User from django.core.mail import send_mail from django.db import models from datetime import datetime class ProfileManager(BaseUserManager): def _create_user(self, phone, email, password, is_superuser, **extra_fields): now = datetime.now() if not phone: raise ValueError('Телефон не может быть пустым') email = self.normalize_email(email) user = self.model(phone=phone, email=email, is_active=True, is_superuser=is_superuser, last_login=now, date_joined=now, **extra_fields) user.set_password(password) user.save() return user def create_user(self, phone, email=None, password=None, **extra_fields): return self._create_user(phone, email, password, False, **extra_fields) def create_superuser(self, phone, email, password, **extra_fields): return self._create_user(phone, email, password, True, **extra_fields) class Profile(AbstractBaseUser): phone = models.CharField('Номер мобильного телефона', max_length=15, unique=True, db_index=True) email = models.EmailField('Email', blank=False, null=False, default=None, unique=False) first_name = models.CharField('Имя', max_length=30, blank=True) last_name = models.CharField('Фамилия', max_length=30, blank=True) date_joined = models.DateTimeField('Регистрация', default=datetime.now) is_superuser = models.BooleanField('Админ', default=False) is_active = models.BooleanField('Активный', default=True, db_index=True) temp_password = models.IntegerField('Одноразовый пароль', default=None, blank=True, null=True) sale = models.IntegerField('Индивидуальная скидка (Beuchat и Scorpena) %', default=0, blank=False, null=False) USERNAME_FIELD = 'phone' REQUIRED_FIELDS = ['email'] objects = ProfileManager() class Meta: verbose_name = 'пользователь' verbose_name_plural = 'пользователи' def __str__(self): return self.phone def get_full_name(self): return '{} {}'.format(self.first_name, self.last_name) def get_short_name(self): return self.first_name def has_perm(self, perm, obj=None): return True def has_module_perms(self, app_label): return True @property def is_staff(self): return self.is_superuser def email_user(self, subject, message, from_email=None, **kwargs): send_mail(subject, message, from_email, [self.email], **kwargs)