Serializers

Serializers convert model instances to and from JSON.

Syntaxclass 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

Example · python
# 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.

Example · python
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.

Example · python
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)  # minutes

Nested serializer for related model

Embeds a full AuthorSerializer inside PostSerializer to include author details in the API output.

Example · python
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

  • Be the first to comment on this lesson.