hiring: логин в формате <буква имени>.<фамилия>

Иван Иванов -> i.ivanov (транслит pytils, нижний регистр, коллизия +счётчик).
Раньше slugify('Фамилия.Имя') терял точку и давал ivanovivan. Единый формат
в найме (_generate_username) и в импорте (transliterate_username).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-21 15:52:57 +03:00
parent 7074244479
commit cfafe2f0b3
2 changed files with 13 additions and 2 deletions
@@ -58,7 +58,9 @@ DEPT_73_NAME_TO_CODE = {
def transliterate_username(last_name, first_name, taken):
from pytils.translit import slugify
base = slugify(f'{last_name}.{first_name}') or 'user'
# Формат: <первая буква имени>.<фамилия> (Иван Иванов -> i.ivanov).
ln, fn = slugify(last_name), slugify(first_name)
base = f'{fn[:1]}.{ln}'.strip('.') or 'user'
username = base
counter = 1
while username in taken or Employee.objects.filter(username=username).exists():
+10 -1
View File
@@ -11,8 +11,17 @@ from apps.employees.models.base import Employee
from apps.hiring.models import HiringRequest, InternAccount
def _username_base(last_name, first_name):
"""Формат логина: <первая буква имени>.<фамилия>, транслит, нижний регистр.
Иван Иванов -> i.ivanov."""
ln = slugify(last_name)
fn = slugify(first_name)
initial = fn[:1]
return f'{initial}.{ln}'.strip('.') or 'user'
def _generate_username(last_name, first_name):
base = slugify(f'{last_name}.{first_name}') or 'user'
base = _username_base(last_name, first_name)
username = base
counter = 1
while Employee.objects.filter(username=username).exists():