from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin from django.db import models from core.models import ContactMixin ## Пользователи class Role(models.Model): name = models.CharField(max_length=100, verbose_name="Название роли") def __str__(self): return self.name class Meta: verbose_name = "Роль пользователя" verbose_name_plural = "Роли пользователей" class AccountManager(BaseUserManager): def create_user(self, login, password=None, **extra_fields): if not login: raise ValueError("Login must be set") user = self.model(login=login, **extra_fields) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, login, password=None, **extra_fields): extra_fields.setdefault("is_staff", True) extra_fields.setdefault("is_superuser", True) return self.create_user(login, password, **extra_fields) class Account(ContactMixin, AbstractBaseUser, PermissionsMixin): login = models.CharField(max_length=150, unique=True, verbose_name="Логин") role = models.ForeignKey( Role, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Роль пользователя" ) is_staff = models.BooleanField(default=False, verbose_name="Сотрудник") is_active = models.BooleanField(default=True, verbose_name="Активен") USERNAME_FIELD = "login" REQUIRED_FIELDS = [] objects = AccountManager() def __str__(self): return super().__str__() or self.login class Meta: verbose_name = "Аккаунт" verbose_name_plural = "Аккаунты"