Django ModelViewSet Tutorial 🎯

beginner
25 min

Django ModelViewSet Tutorial 🎯

Welcome to our deep dive into Django's powerful ModelViewSet! This tutorial is designed for both beginners and intermediates, so let's get started. πŸš€

What is ModelViewSet? πŸ“

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.

Creating a ModelViewSet πŸ’‘

To create a ModelViewSet, you first need a Django model. Let's create a simple model for a Book:

python
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:

python
from rest_framework.viewsets import ModelViewSet from .models import Book class BookViewSet(ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer

Here, BookSerializer is a serializer that converts our model data into JSON format.

Understanding ModelViewSet Methods πŸ“

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.

Practical Example 🎯

Let's create a book and list all books:

python
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:

json
{ "title": "The Catcher in the Rye", "author": "J.D. Salinger", "published_date": "1951-07-16" }

Your server will respond with:

json
{ "message": "Book created successfully!" }

And if you make a GET request to the same endpoint, you'll receive a list of all books.

Quiz πŸ“

Quick Quiz
Question 1 of 1

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! 🌟