import re from django.db import models from django.contrib.auth.models import AbstractUser from django.core.exceptions import ValidationError # Валидатор, разрешающий русские и английские буквы и тире def validate_name(value): if not re.match(r'^[a-zA-Zа-яА-Я-]+$', value): raise ValidationError( 'Поле может содержать только русские/английские буквы и тире.', params={'value': value}, ) # Валидатор для номера телефона def validate_phone_number(value): if (not re.match(r'^\d+$', value)) or (len(value) < 11): raise ValidationError( 'Номер телефона должен состоять минимум из 11 цифр.', params={'value': value}, ) class ShariXUser(AbstractUser): last_name = models.CharField("Фамилия", max_length=150, validators=[validate_name]) first_name = models.CharField("Имя", max_length=150, validators=[validate_name]) middle_name = models.CharField("Отчество", max_length=150, blank=True, null=True, validators=[validate_name]) phone_number = models.CharField("Номер телефона", max_length=13, unique=True, validators=[validate_phone_number]) email = models.EmailField("Адрес электронной почты") avatar = models.ImageField("Аватар", upload_to="user_avatars/", null=True, blank=True) USERNAME_FIELD = 'phone_number' REQUIRED_FIELDS = ['first_name', 'last_name', 'username', 'email'] def __str__(self): return f"{self.first_name} {self.last_name}{' ' + self.middle_name if self.middle_name else ''}"