Ответ
ModelViewSet
в Django REST Framework (DRF) — это высокоуровневый класс, который объединяет в себе логику для полного набора стандартных CRUD-операций (Create, Retrieve, Update, Delete) для одной модели.
Он позволяет значительно сократить количество шаблонного кода, так как наследуется от GenericViewSet
и включает в себя следующие mixin
-классы:
CreateModelMixin
— для создания объектов (POST)RetrieveModelMixin
— для получения одного объекта (GET by id)UpdateModelMixin
— для полного или частичного обновления (PUT/PATCH)DestroyModelMixin
— для удаления объекта (DELETE)ListModelMixin
— для получения списка объектов (GET list)
Пример использования:
# views.py
from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializers import BookSerializer
class BookViewSet(ModelViewSet):
"""Этот ViewSet автоматически предоставляет действия .list(), .retrieve(),
.create(), .update(), .partial_update() и .destroy()."""
queryset = Book.objects.all()
serializer_class = BookSerializer
Основное преимущество ModelViewSet
проявляется при использовании с маршрутизаторами (Routers
), которые автоматически генерируют URL-шаблоны для всех стандартных действий.
# urls.py
from rest_framework.routers import DefaultRouter
from .views import BookViewSet
router = DefaultRouter()
router.register(r'books', BookViewSet, basename='book')
urlpatterns = router.urls
# Сгенерирует URL-ы типа /books/ и /books/{id}/
Для добавления нестандартных эндпоинтов, не входящих в CRUD, используются декораторы @action
.