models.py 1.7 KB

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