Функция get_user_model

Функция get_user_model предназначена для получения модели пользователя, которая активна в текущем проекте Django. Она возвращает класс модели пользователя, который может быть стандартной моделью User или кастомной моделью, заданной в настройках проекта через переменную AUTH_USER_MODEL. Использование этой функции гарантирует, что код всегда будет работать с правильной моделью пользователя, даже если она была заменена на кастомную.

Синтаксис

pythonfrom django.contrib.auth import get_user_model

UserModel = get_user_model()

Функция не принимает аргументов и возвращает класс модели пользователя.

Пример

Давайте получим модель пользователя и создадим нового пользователя:

pythonfrom 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)

Результат выполнения кода:

python"john_doe"
"john@example.com"

Пример

Давайте используем get_user_model в определении модели с внешним ключом на пользователя:

pythonfrom 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

Теперь можно создать статью и связать ее с пользователем:

pythonfrom 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)

Результат выполнения кода:

python"My first article"
"john_doe"

Пример

Давайте выполним фильтрацию пользователей с помощью полученной модели:

pythonfrom 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}")

Результат выполнения кода:

python"john_doe - john@example.com"
"admin - admin@example.com"

Смотрите также

  • функция authenticate,
    которая проверяет учетные данные пользователя
  • функция login,
    которая выполняет вход пользователя в систему
  • класс User,
    который представляет модель пользователя
  • менеджер UserManager,
    который предоставляет методы для работы с пользователями