Skip to content

Nested Serializer

Nested Serializers

Consider you have another model Author related to Book. You want to include the author details in the book serialization.

Models
class Author(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    published_year = models.IntegerField()
Serializers
class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = ['id', 'name', 'age']

class BookWithAuthorSerializer(serializers.ModelSerializer):
    author = AuthorSerializer()

    class Meta:
        model = Book
        fields = ['id', 'title', 'author', 'published_year']
Views
class BookListView(APIView):
    def get(self, request):
        books = Book.objects.all()
        serializer = BookWithAuthorSerializer(books, many=True)
        return Response(serializer.data)
URLs
from django.urls import path
from .views import BookListView, BookCreateView

urlpatterns = [
    path('books/', BookListView.as_view(), name='book-list'),
    path('books/create/', BookCreateView.as_view(), name='book-create'),
]

Summary

  • Nested Serializers: Serialize related models, allowing you to represent complex relationships in your API.