Переопределение модели пользователя в 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'
Вернуться на верх