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) 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)) )