Serializers

  • Learn how to use DRF Serializers to convert models into JSON and validate API data.
  • What is a Serializer?

    Serializer in DRF is like a translator between:

    • Django Models / Querysets (Python objects)

    • JSON / XML / other formats (Data sent to frontend / API clients)

    It converts complex data into JSON and validates incoming data.

    Why Serializers are Needed?

    • JSON is required for APIs

    • Model objects cannot be sent directly

    • DRF serializer handles validation & formatting automatically

    • Enables clean & reusable API structure

    Analogy

    Python Object

    JSON Object

    Student(name="Rahul")

    {"name": "Rahul"}

    Serializer Classes

    Basic Serializer Class

    Used for manual serialization.

Manual Serializer Example

serializers.py

from rest_framework import serializers

class StudentSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    name = serializers.CharField(max_length=100)
    email = serializers.EmailField()
    course = serializers.CharField(max_length=50)
  • Description

    • Serializer → Base class

    • Fields are explicitly defined

    • Works without models

  • Using Serializer in View

Serializer Usage in APIView

views.py

from rest_framework.views import APIView
from rest_framework.response import Response
from .serializers import StudentSerializer

class StudentAPIView(APIView):
    def get(self, request):
        student_data = {"id": 1, "name": "Rahul", "email": "rahul@test.com", "course": "Django"}
        serializer = StudentSerializer(student_data)
        return Response(serializer.data)
  • Description

    • serializer.data → Converts Python dict into JSON

    • Suitable for non-model objects

    ModelSerializer

    What is ModelSerializer?

    ModelSerializer is a shortcut to automatically create serializer from a Django model.

    Saves time → automatically handles:

    • Fields

    • Validation

    • Create / Update methods

    ModelSerializer Syntax

ModelSerializer Example

models.py

from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    course = models.CharField(max_length=50)

    def __str__(self):
        return self.name

ModelSerializer Class

serializers.py

from rest_framework import serializers
from .models import Student

class StudentModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = ['id', 'name', 'email', 'course']
  •  Description

    • Meta.model → Links to Django model

    • fields → Fields to include

    • Optional: exclude to ignore fields

    Using ModelSerializer in APIView

APIView with ModelSerializer

views.py

from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Student
from .serializers import StudentModelSerializer

class StudentListAPIView(APIView):
    def get(self, request):
        students = Student.objects.all()
        serializer = StudentModelSerializer(students, many=True)
        return Response(serializer.data)
  • Description

    • many=True → Serializing queryset

    • Returns JSON list of students

    Creating & Updating Data with ModelSerializer

POST API Using ModelSerializer

class StudentCreateAPIView(APIView):
    def post(self, request):
        serializer = StudentModelSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=201)
        return Response(serializer.errors, status=400)
  • Description

    • serializer.is_valid() → Validates input

    • serializer.save() → Creates model instance

    Advantages of ModelSerializer

    • Reduces boilerplate code

    • Auto field validation

    • Supports create & update automatically

    • Works seamlessly with DRF views

    Serializer vs ModelSerializer

    Feature

    Serializer

    ModelSerializer

    Fields

    Manually defined

    Automatically from model

    Create / Update

    Manual

    Automatic

    Validation

    Manual

    Automatic

    Use case

    Non-model data

    Model data