Welcome to our deep dive into Django's powerful ModelViewSet! This tutorial is designed for both beginners and intermediates, so let's get started. π
In Django Rest Framework (DRF), ModelViewSet is a powerful tool that simplifies the creation of APIs for your Django models. It automatically provides ListCreateAPIView, RetrieveUpdateDestroyAPIView, and other related views.
To create a ModelViewSet, you first need a Django model. Let's create a simple model for a Book:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField('date published')Now, let's create a BookViewSet:
from rest_framework.viewsets import ModelViewSet
from .models import Book
class BookViewSet(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializerHere, BookSerializer is a serializer that converts our model data into JSON format.
ModelViewSet automatically provides several methods:
list(): Retrieves and returns a list of objects.create(): Creates a new object.retrieve(): Retrieves a single object.update(): Updates an existing object.destroy(): Deletes an object.Let's create a book and list all books:
from rest_framework import status
from django.http import JsonResponse
from .models import Book
from .serializers import BookSerializer
from rest_framework.viewsets import ModelViewSet
class BookViewSet(ModelViewSet):
# ... (previous code)
def create(self, request, *args, **kwargs):
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return JsonResponse({"message": "Book created successfully!"}, status=status.HTTP_201_CREATED)
return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def list(self, request, *args, **kwargs):
books = Book.objects.all()
serializer = BookSerializer(books, many=True)
return JsonResponse(serializer.data, safe=False)Now, when you make a POST request to the /api/books/ endpoint with a JSON body like this:
{
"title": "The Catcher in the Rye",
"author": "J.D. Salinger",
"published_date": "1951-07-16"
}Your server will respond with:
{
"message": "Book created successfully!"
}And if you make a GET request to the same endpoint, you'll receive a list of all books.
What does ModelViewSet provide in Django Rest Framework?
Remember, this is just the beginning! Explore more about Django ModelViewSet to build powerful APIs for your projects. Happy coding! π