В Django вы можете автоматически проставлять юзернейм при создании пользователя с использованием сигналов и переопределения метода save() модели пользователя.
1. Подключение сигналов:
Создайте файл signals.py внутри вашего приложения Django (например, app_name/signals.py) и импортируйте модуль следующим образом:
from django.db.models.signals import pre_save from django.dispatch import receiver from django.contrib.auth.models import User
2. Создание функции-обработчика сигнала:
Создайте функцию, которая будет автоматически проставлять юзернейм перед сохранением пользователя:
@receiver(pre_save, sender=User) def set_username(sender, instance, **kwargs): # Проверяем, что у пользователя нет юзернейма if not instance.username: # Генерируем юзернейм на основе имени и фамилии username = f"{instance.first_name.lower()}.{instance.last_name.lower()}" # Проверяем, что такого юзернейма еще нет в системе while User.objects.filter(username=username).exists(): # Добавляем случайное число к юзернейму при необходимости username += f".{random.randint(1000, 9999)}" # Сохраняем юзернейм instance.username = username
3. Регистрация сигнала:
Вызовите функцию регистрации сигнала в файле приложения app_name/apps.py:
from django.apps import AppConfig class MyAppConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'app_name' def ready(self): import app_name.signals
4. Применение изменений:
Добавьте app_name.apps.MyAppConfig в параметр INSTALLED_APPS в файле settings.py вашего проекта Django.
Теперь, при сохранении нового экземпляра модели User, функция set_username будет вызываться автоматически и проставлять непустой юзернейм на основе имени и фамилии. Если такой юзернейм уже есть в системе, функция будет добавлять случайное число в конец до тех пор, пока не будет найдено уникальное значение.