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