Функция get_user_model
Функция get_user_model предназначена для получения модели пользователя, которая активна в текущем проекте Django. Она возвращает класс модели пользователя, который может быть стандартной моделью User или кастомной моделью, заданной в настройках проекта через переменную AUTH_USER_MODEL. Использование этой функции гарантирует, что код всегда будет работать с правильной моделью пользователя, даже если она была заменена на кастомную.
Синтаксис
from django.contrib.auth import get_user_model
UserModel = get_user_model()
Функция не принимает аргументов и возвращает класс модели пользователя.
Пример
Давайте получим модель пользователя и создадим нового пользователя:
from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.create_user(
username="john_doe",
email="john@example.com",
password="secure_password123"
)
print(user.username)
print(user.email)
Результат выполнения кода:
"john_doe"
"john@example.com"
Пример
Давайте используем get_user_model в определении модели с внешним ключом на пользователя:
from django.db import models
from django.contrib.auth import get_user_model
User = get_user_model()
class Article(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
Теперь можно создать статью и связать ее с пользователем:
from myapp.models import Article
from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.get(username="john_doe")
article = Article.objects.create(
title="My first article",
author=user
)
print(article.title)
print(article.author.username)
Результат выполнения кода:
"My first article"
"john_doe"
Пример
Давайте выполним фильтрацию пользователей с помощью полученной модели:
from django.contrib.auth import get_user_model
User = get_user_model()
active_users = User.objects.filter(is_active=True)
for user in active_users:
print(f"{user.username} - {user.email}")
Результат выполнения кода:
"john_doe - john@example.com"
"admin - admin@example.com"
Смотрите также
-
функция
authenticate,
которая проверяет учетные данные пользователя -
функция
login,
которая выполняет вход пользователя в систему -
класс
User,
который представляет модель пользователя -
менеджер
UserManager,
который предоставляет методы для работы с пользователями