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.