feat: MVP-скелет площадки (Django + MySQL/SQLite, модели по ТЗ §4, базовые страницы)

This commit is contained in:
apuc committed 2026-09-23 16:47:57 +03:00
1 parent e5f312a00f
commit 8218a568ce
67 files changed
+1929

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
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))
)