Django REST Framework
Создание модельных менеджеров
Создание модельных менеджеров
Создание модельных менеджеров
Создание модельных менеджеров
Создание модельных менеджеров
Создание модельных менеджеров
70.67K

DRF - Модели (2)

1. Django REST Framework

print(“Создание модельных менеджеров”)

2. Создание модельных менеджеров

Менеджер модели (Model Manager) — это интерфейс между моделью Django и
базой данных.Каждая модель имеет как минимум один менеджер, обычно это
objects, который предоставляет методы для работы с базой данных (например,
all(), filter(), get(), и т.д.).
Book.objects.all()
Book.objects.filter(author='Толстой')

3. Создание модельных менеджеров

Зачем нужны кастомные менеджеры
Иногда стандартных возможностей менеджера objects недостаточно. Тогда
создаются кастомные менеджеры, которые позволяют:
Инкапсулировать повторяющиеся фильтры и логику запросов
Делать код вьюшек и сериализаторов более чистым и лаконичным
Повышать читаемость и тестируемость кода
Реализовывать бизнес-логику «на уровне модели», а не во вьюшках

4. Создание модельных менеджеров

Пример: Если у вас есть модель Article с флагом is_published, вы можете
вынести фильтрацию опубликованных записей в менеджер.
Чтобы создать менеджер, достаточно унаследоваться от models.Manager и
переопределить метод get_queryset().
from django.db import models
class PublishedManager(models.Manager):
def get_queryset(self):
# Возвращаем только опубликованные статьи
return super().get_queryset().filter(is_published=True)

5. Создание модельных менеджеров

Теперь в модели можно использовать два менеджера: стандартный и кастомный.
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
is_published = models.BooleanField(default=False)
objects = models.Manager()
published = PublishedManager()
# стандартный менеджер
# кастомный

6. Создание модельных менеджеров

Теперь можно обращаться к обоим менеджерам:
Article.objects.all()
Article.published.all()
# Все статьи
# Только опубликованные
Это особенно полезно, если в проекте часто нужно фильтровать по признаку
публикации — логика не дублируется в разных местах.
Помимо get_queryset(), в менеджере можно определять собственные методы,
которые будут возвращать кастомные QuerySet или отдельные данные.

7. Создание модельных менеджеров

class OrderManager(models.Manager):
def recent(self):
return self.get_queryset().order_by('-created_at')[:10]
def by_user(self, user):
return self.get_queryset().filter(user=user)
Использование:
Order.objects.recent()
Order.objects.by_user(request.user)
English     Русский Правила