Serializers (Serializer & ModelSerializer)
Serializers convert Django model instances to JSON and validate incoming JSON data. ModelSerializer auto-generates fields from your model — similar to ModelForm but for APIs. Serializers are the heart of DRF.
20 min•By Priygop Team•Updated 2026
Serializer Types
- Serializer — Manual field definitions (full control)
- ModelSerializer — Auto-generates from model (most common)
- Serialization: Model instance -> JSON (output)
- Deserialization: JSON -> validated data (input)
- serializer.data — Serialized output
- serializer.is_valid() — Validate input
- serializer.validated_data — Cleaned input data
- serializer.save() — Create or update model instance
Serializer Examples
Serializer Examples
# blog/serializers.py
# from rest_framework import serializers
# from .models import Post, Category, Comment
# Basic Serializer (manual)
# class PostSerializer(serializers.Serializer):
# id = serializers.IntegerField(read_only=True)
# title = serializers.CharField(max_length=200)
# content = serializers.CharField()
# created_at = serializers.DateTimeField(read_only=True)
# ModelSerializer (recommended — auto from model)
# class PostSerializer(serializers.ModelSerializer):
# author_name = serializers.CharField(source='author.username', read_only=True)
# comment_count = serializers.IntegerField(source='comments.count', read_only=True)
#
# class Meta:
# model = Post
# fields = ['id', 'title', 'content', 'slug', 'author', 'author_name',
# 'category', 'tags', 'published', 'comment_count',
# 'created_at', 'updated_at']
# read_only_fields = ['slug', 'created_at', 'updated_at']
# Nested serializer
# class CommentSerializer(serializers.ModelSerializer):
# author_name = serializers.CharField(source='author.username', read_only=True)
# class Meta:
# model = Comment
# fields = ['id', 'content', 'author', 'author_name', 'created_at']
# class PostDetailSerializer(serializers.ModelSerializer):
# comments = CommentSerializer(many=True, read_only=True)
# class Meta:
# model = Post
# fields = ['id', 'title', 'content', 'comments']Tip
Tip
Use ModelSerializer for auto-generated serializers. It creates fields from model, validates data, and handles nested relationships.
Diagram
Loading diagram…
QuerySets are LAZY — no DB hit until evaluated.
Common Mistake
Warning
Exposing sensitive fields in serializers. Always set fields explicitly — never use fields = '__all__' in production.
Practice Task
Note
(1) Create a ModelSerializer for Post. (2) Add validation for title length. (3) Test with DRF's browsable API.
Quick Quiz
Key Takeaways
- Serializers convert Django model instances to JSON and validate incoming JSON data.
- Serializer — Manual field definitions (full control)
- ModelSerializer — Auto-generates from model (most common)
- Serialization: Model instance -> JSON (output)