|
@@ -1,14 +1,37 @@
|
|
|
+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):
|
|
|
- middle_name = models.CharField(max_length=150, null=True, blank=True, verbose_name="Отчество")
|
|
|
- phone_number = models.CharField(max_length=18, unique=True, verbose_name="Номер телефона")
|
|
|
- avatar = models.ImageField(upload_to="user_avatars/", null=True, blank=True, verbose_name="Аватар")
|
|
|
+ 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 = ['username', 'first_name', 'last_name']
|
|
|
+ USERNAME_FIELD = 'phone_number'
|
|
|
+ REQUIRED_FIELDS = ['first_name', 'last_name', 'username', 'email']
|
|
|
|
|
|
def __str__(self):
|
|
|
- return f"{self.first_name} {self.last_name}{' ' + self.patronymic if self.patronymic else ''}"
|
|
|
+ return f"{self.first_name} {self.last_name}{' ' + self.middle_name if self.middle_name else ''}"
|