Использование языков, отличных от английского, для имени пользователя в Django

Я работаю над проектом Django, в котором пользователь может использовать местные языки для своего имени пользователя. Поэтому вместо ISCIIUsernameValidator я использовал UnicodeUsernameValidator для решения этой проблемы. Но здесь я столкнулся с проблемой. Во время тестирования я использовал для имени пользователя три языка - хинди и японский.

  1. Japanese: I used Katakana(アーロン), Hiragana(まつもと) and Kanji(田中) for the username and it worked. Nice
  2. Hindi: When I used simple words like 'कलम' it worked. But when I used complicated words like 'मोहित' or 'लेखक', it failed. And the error I received was Enter a valid username. This value may contain only letters, numbers, and @/./+/-/_ characters.

Это класс Account из models.py

class Account(AbstractBaseUser, PermissionsMixin):

username_validator = UnicodeUsernameValidator()
username = models.CharField(
    _('username'),
    max_length=25,
    unique=True,
    validators=[username_validator],
    error_messages={
        'unique': _("A user with that username already exists."),
    },
)

email = models.EmailField(_('email address'), max_length=30, unique=True)

date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
last_login = models.DateTimeField(_('last login'), auto_now=True)
ref_code = models.CharField(_('Ref Code Used'), max_length=20, blank=True, null=True)


is_active = models.BooleanField(_('active'), default=False, 
    
        
is_staff = models.BooleanField(_('staff status'), default=False)

is_admin = models.BooleanField(_('admin status'), default=False)

is_superuser = models.BooleanField(_('superuser status'), default=False)

objects = AccountManager()

EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']

class Meta:
    verbose_name = _('Account')
    verbose_name_plural = _('Accounts')

def clean(self):
    super().clean()
    self.email = self.__class__.objects.normalize_email(self.email)

def has_perm(self, perm, obj=None):
    return self.is_admin

def has_module_perms(self, app_label):
    return True`

Для справки код для UnicodeUsernameValidator

@deconstructible
class UnicodeUsernameValidator(validators.RegexValidator):
    regex = r'^[\w.@+-]+\Z'
    message = _(
        'Enter a valid username. This value may contain only letters, '
        'numbers, and @/./+/-/_ characters.'
    )
    flags = 0
Вернуться на верх