Django регистрация пользователей

Я создаю приложение для социальных сетей и хочу создавать пользователей без использования формы создания пользователя, чтобы я мог создать свою собственную форму. Я использую. User.objects.create_user() однако, когда я ввожу User.objects.create_user(username=request.POST['un']), я получаю ошибку 'UNIQUE constraint failed: auth_user.username'. Когда я просто передаю строку, она работает нормально, но когда я использую данные формы, она не работает.

UNIQUE constraint в данном контексте означает, что имена пользователей должны быть уникальными. Не может быть двух пользователей с одинаковым именем пользователя. Мне кажется, что request.POST['un'] содержит значение, которое уже является именем пользователя другого пользователя.

Как это исправить?

Возможно, существует несколько решений этой проблемы, и вам нужно подумать, какое из них применимо к вашему приложению.

1. Убедитесь, что все имена пользователей уникальны

Это самый очевидный ответ, но не всегда желаемый. Например, может быть так, что вы хотите выбрать пользователей по электронной почте, и вам не важно имя пользователя. В этом случае очень полезной может оказаться функция get_or_create(), которая выберет пользователя с именем пользователя, или, если его не существует, создаст нового: смотрите docs

2. Создание собственной пользовательской модели

Это позволяет вам настраивать встроенную в django модель User. Таким образом, вы можете выбирать пользователей на основе чего угодно (например: email, аккаунт google, аккаунт facebook, или что угодно уникальное для каждого пользователя), и не заботиться об имени пользователя. В Django docs есть хорошая статья об этом: https://docs.djangoproject.com/en/4.0/topics/auth/customizing/#substituting-a-custom-user-model.

Вернуться на верх