Обязательно посмотрите Настройка аутентификации в Django docs.
Но я постараюсь разбить это для вас. Вы можете следовать и добавить свои конкретные поля:
Во-первых, для создания пользовательской модели User
вам необходимо наследовать от AbstractUser
или AbstractBaseUser
. Имейте в виду, что первый предоставляет больше функциональных возможностей, чем второй, а также требует меньше настроек. Так что, если вы не слишком знакомы с системой аутентификации Django, я советую вам наследовать от AbstractUser
, чтобы избежать ненужной настройки.
Пример:
Допустим, вы хотите расширить стандартную модель пользователя и добавить EmailField
.
#models.py 'users' app
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
email = models.EmailField(unique=True)
Теперь нам нужно сообщить Django, что мы используем нашу новую модель CustomUser.
поэтому в нашем файле настроек мы можем добавить:
#settings.py
AUTH_USER_MODEL = 'users.CustomUser'
Возможно, вы захотите, чтобы пользователи указывали адрес электронной почты при регистрации. Для этого вам также необходимо настроить UserCreationForm
в нашем файле форм:
#forms.py
from users.models import CustomUser
from django.contrib.auth.forms import UserCreationForm
class CustomUserCreationForm(UserCreationForm):
email = forms.EmailField(max_length=200)
class Meta:
model = CustomUser
fields = ('username', 'email', 'password1', 'password2')
После этого вам нужно пойти дальше и зарегистрировать свою только что созданную модель CustomUser
в своей admin.py
.
Скорее всего, вам придется сделать кастом UserChangeForm
. И, возможно, пользовательский сервер аутентификации (например, если вы хотите, чтобы пользователи входили по электронной почте). Но это, вероятно, заслуживает нового вопроса.
Я настоятельно рекомендую вам прочитать документацию по аутентификации Django (ссылка вверху). Это даст вам лучшее руководство для правильной настройки под ваши конкретные потребности.
В качестве альтернативы, если вы чувствуете, что в данный момент это слишком сложно, вы можете также рассмотреть возможность создания отдельной модели с необходимыми настраиваемыми полями и затем объявить OneToOneField
для связи между стандартной моделью User
и вашей новой моделью.
Удачи!