Files
vikileo-shop/config/accounts/models.py
2024-05-09 17:20:16 +03:00

81 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from __future__ import annotations
from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.db import models
#
# Управление учётными записями
class UserManager(BaseUserManager):
def create_user(
self, email: str, password: str | None = None, **other_fields
) -> User:
user = User(email=email, **other_fields)
if password:
user.set_password(password)
else:
user.set_unusable_password()
user.save()
return user
def create_superuser(self, email: str, password: str | None = None, **other_fields) -> User:
other_fields.setdefault("is_staff", True)
other_fields.setdefault("is_superuser", True)
other_fields.setdefault("is_active", True)
if other_fields.get("is_staff") is not True:
raise ValueError("Superuser must be assigned to is_staff=True.")
if other_fields.get("is_superuser") is not True:
raise ValueError("Superuser must be assigned to is_superuser=True.")
return self.create_user(email, password, **other_fields)
class User(AbstractUser):
GENDER_CHOICES = (
('n', 'Не указано'),
('m', 'Мужчина'),
('f', 'Женщина'),
)
# remove default fields
# first_name = None
# last_name = None
first_name = models.CharField(max_length=60, null=True, blank=True, verbose_name='Имя')
last_name = models.CharField(max_length=60, null=True, blank=True, verbose_name='Фамилия')
gender = models.CharField(verbose_name='Пол', max_length=10, choices=GENDER_CHOICES, default='n')
email = models.EmailField(verbose_name='Email Address', unique=True)
username = models.CharField(max_length=60, verbose_name='Ник')
bio = models.TextField(blank=True, verbose_name='О себе')
image = models.URLField(null=True, blank=True, verbose_name='Аватар')
# avatar = models.ImageField(upload_to='avatar_users/%Y/%m/%d/', null=True, blank=True)
followers = models.ManyToManyField("self", blank=True, symmetrical=False, verbose_name='Подписчики')
address = models.CharField(verbose_name='Адрес', max_length=255, blank=True, null=True)
# country = models.ForeignKey('chatroom.Country', on_delete=models.SET_NULL, null=True)
# state = models.ForeignKey('chatroom.State', on_delete=models.SET_NULL, null=True)
date_joined = models.DateTimeField(verbose_name='Дата регистрации', blank=True, null=True, auto_now_add=True)
last_updated = models.DateTimeField(verbose_name='Последнее обновление', blank=True, null=True, auto_now=True)
last_login = models.DateTimeField(verbose_name='Последняя авторизация', blank=True, null=True, auto_now=True)
status = models.BooleanField(default=False, verbose_name='Статус')
EMAIL_FIELD = 'email' # Указываем поле для аутентификации по email
USERNAME_FIELD = 'email' # Указываем поле email как основной идентификатор пользователя
REQUIRED_FIELDS = [] # Поля, которые должны быть заполнены при создании пользователя
objects = UserManager()
def get_full_name(self) -> str:
if self.first_name and self.last_name:
return f"{self.first_name} {self.last_name}"
else:
return self.username
def get_short_name(self) -> str:
if self.first_name and self.last_name:
return f"{self.first_name[0]}{self.last_name}"
else:
return self.username