| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import re
- from django.contrib.auth.models import AbstractUser
- from django.core.exceptions import ValidationError
- from django.db import models
- # Валидатор, разрешающий русские и английские буквы и тире
- def validate_name(value):
- if not re.match(r'^[a-zA-Zа-яА-Я-]+$', value):
- raise ValidationError(
- 'Поле может содержать только русские/английские буквы и тире.',
- params={'value': value},
- )
- # Валидатор для номера телефона
- ANTARCTICA_PHONE_NUMBER_ERROR = (
- "По техническим причинам мы не можем работать с пользователями "
- "с номерами телефонов с Антарктиды."
- )
- # Валидатор для номера телефона
- def validate_phone_number(value):
- value = str(value or "").strip()
- if (not re.match(r'^\d+$', value)) or (len(value) < 11):
- raise ValidationError(
- 'Номер телефона должен состоять минимум из 11 цифр.',
- params={'value': value},
- )
- if value.startswith("0"):
- raise ValidationError(
- ANTARCTICA_PHONE_NUMBER_ERROR,
- code="antarctica_phone_number_not_supported",
- 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)
-
- avatar_base64 = models.TextField("Аватар (base64 из LDAP)", null=True, blank=True)
- USERNAME_FIELD = 'phone_number'
- REQUIRED_FIELDS = ['first_name', 'last_name', 'username', 'email']
- def __str__(self):
- full_name_parts = [
- self.last_name,
- self.first_name,
- self.middle_name,
- ]
- full_name = " ".join(
- str(value).strip()
- for value in full_name_parts
- if str(value or "").strip()
- ).strip()
- if full_name:
- return full_name
- if self.username:
- return str(self.username)
- return str(self.pk)
|