Files
rosmol_shop/apps/accounts/models.py
T

53 lines
1.7 KiB
Python

from django.contrib.auth.models import AbstractUser
from django.db import models
class Role(models.TextChoices):
"""Роли пользователей (ТЗ §2)."""
BUYER = 'buyer', 'Покупатель'
SELLER = 'seller', 'Продавец'
MODERATOR = 'moderator', 'Модератор'
ADMIN = 'admin', 'Администратор'
PARTNER = 'partner', 'Партнёр (Росмолодёжь)'
class User(AbstractUser):
"""Пользователь площадки (ТЗ §4: User)."""
role = models.CharField(
'Роль', max_length=20, choices=Role.choices, default=Role.BUYER,
)
full_name = models.CharField('ФИО', max_length=255, blank=True)
phone = models.CharField('Телефон', max_length=32, blank=True)
birth_date = models.DateField('Дата рождения', null=True, blank=True)
region = models.CharField('Регион', max_length=120, blank=True)
pd_consent = models.BooleanField(
'Согласие на обработку ПДн', default=False,
)
class Meta:
verbose_name = 'Пользователь'
verbose_name_plural = 'Пользователи'
def __str__(self):
return self.full_name or self.username
@property
def is_seller(self):
return self.role == Role.SELLER
@property
def age(self):
"""Возвращает возраст в годах или None, если дата не указана."""
from datetime import date
if not self.birth_date:
return None
today = date.today()
return (
today.year
- self.birth_date.year
- ((today.month, today.day) < (self.birth_date.month, self.birth_date.day))
)