Serializers
Serializers convert model instances to and from JSON.
Syntax
class PostSerializer(serializers.ModelSerializer): ...A serializer translates model instances into JSON (and validates incoming JSON back into objects) — the API equivalent of a form. A ModelSerializer builds the fields from your model automatically.
Example
# blog/serializers.py
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ["id", "title", "body", "published"]
# Usage:
# serializer = PostSerializer(post)
# serializer.data -> {'id': 1, 'title': ..., ...}When to use it
- A developer writes a ModelSerializer to convert Post objects to JSON for an API response with a single Meta class.
- A developer adds a SerializerMethodField to include a computed field like 'reading_time' in the API output.
- A team uses nested serializers to include author details inline within a post's JSON representation.
More examples
Basic ModelSerializer
Creates a serializer that converts Post model instances to/from JSON with minimal code.
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ["id", "title", "body", "published_at"]SerializerMethodField
Adds a computed 'reading_time' field derived from the body word count, not stored in the database.
class PostSerializer(serializers.ModelSerializer):
reading_time = serializers.SerializerMethodField()
class Meta:
model = Post
fields = ["id", "title", "body", "reading_time"]
def get_reading_time(self, obj):
words = len(obj.body.split())
return max(1, words // 200) # minutesNested serializer for related model
Embeds a full AuthorSerializer inside PostSerializer to include author details in the API output.
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ["id", "username", "email"]
class PostSerializer(serializers.ModelSerializer):
author = AuthorSerializer(read_only=True)
class Meta:
model = Post
fields = ["id", "title", "author"]
Discussion