Переопределение модели пользователя в Django
Я не продвинут в Django и хотел бы узнать, как и возможно ли это сделать.
Мне нужно переопределить модель пользователя Django, и изменить поля "username" на "sr_usuario" и "password" на "sr_password", но я хотел бы продолжать использовать все стандартные схемы аутентификации и разрешения Django. Я хочу не только изменить описание в базе данных или метку, я хочу изменить имя поля в модели, чтобы, например, когда мне нужно сделать запрос, я бы использовал User.objects.filter(sr_usuario="имя_пользователя") и все бы работало обычно.
Это возможно? Я не смог найти ничего в документации или на форумах, которые я искал.
Заранее большое спасибо!
Это невозможно, поскольку весь код django строго привязан к полям в user.
Однако вы можете создать пользовательский бэкенд аутентификации и использовать пользовательскую модель пользователя с указанными именами полей. Но это потребует много кодирования.
Да, если вы хотите переопределить модель пользователя, вам нужно добавить в настройки:
AUTH_USER_MODEL = "<THE PATH OF THE USER MODEL>"
И в этой модели расширить ее, используя AbstractUser
Документация Django здесь: https://docs.djangoproject.com/en/4.1/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project
You should subclass AbstractBaseUser [doc], and set this custom user model as AUTH_USER_MODEL [doc] in your settings.
This will instruct Django to use your custom user model everywhere, and retain all the built-in auth/permission behavior.
For example:
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.db import models
class MyUser(AbstractBaseUser, PermissionsMixin):
sr_usuario = models.CharField(max_length=100, unique=True)
sr_password = models.CharField(max_length=100)
# ...
Then use this in settings:
AUTH_USER_MODEL = 'my_app.MyUser'
Note that migrations can be tricky here, so it is best to do this at the start of a new project.
class MyUser(AbstractUser):
username = None
sr_usuario = models.CharField(max_length=150, unique=True)
USERNAME_FIELD = 'sr_usuario'