from rest_framework import serializers
from django.db.models import Prefetch
from .models import Author, Book
class BookSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title']
class AuthorWithBooksSerializer(serializers.ModelSerializer):
books = BookSimpleSerializer(many=True, read_only=True)
book_count = serializers.SerializerMethodField()
class Meta:
model = Author
fields = ['id', 'name', 'books', 'book_count']
def get_book_count(self, obj):
return obj.books.count()
class AuthorListView(generics.ListAPIView):
serializer_class = AuthorWithBooksSerializer
def get_queryset(self):
return Author.objects.prefetch_related(
Prefetch('books', queryset=Book.objects.filter(published=True))
)Advanced Serializer Optimization and Performance
prefetch_related with Prefetch filters books to only published ones, reducing queries. However, get_book_count() calls count() on each author, causing potential N+1 queries.
prefetch_related() automatically optimizes SerializerMethodField calls; get_book_count() will not cause additional queries.
Prefetch() filters books at the serialization level, not the database level, so all books are still fetched.
BookSimpleSerializer with many=True requires explicit queryset definition; read_only=True is invalid for nested serializers.
Show answer & explanationAnswer
Correct answer
prefetch_related with Prefetch filters books to only published ones, reducing queries. However, get_book_count() calls count() on each author, causing potential N+1 queries.
Explanation
prefetch_related() reduces database queries for reverse relations. Prefetch() allows filtering related objects. SerializerMethodField with count() can cause N+1 queries if not optimized with annotate().
All 29 Django REST API Development questions
- 1.What is the primary purpose of Django REST Framework (DRF)?
- 2.What is a Serializer in Django REST Framework?
- 3.Which decorator is used to convert a regular Django view into an API view in DRF?
- 4.What is the purpose of ViewSets in Django REST Framework?
- 5.Which class should be inherited to create a basic API view in DRF?
- 6.What is the default authentication method in Django REST Framework?
- 7.How do you register URLs for ViewSets in Django REST Framework?
- 8.What does the status module in DRF provide?
- 9.Which permission class allows only authenticated users to access an API endpoint?
- 10.What is the Response class used for in Django REST Framework?
- 11.Scenario:
- 12.What will be the output of the following code snippet?
- 13.Scenario:
- 14.What is the difference between ModelSerializer and Serializer in Django REST Framework?
- 15.Identify the bug in the following code snippet:
- 16.How do you implement pagination in a Django REST Framework API?
- 17.Scenario:
- 18.What is the purpose of the queryset attribute in a ViewSet?
- 19.Scenario:
- 20.What will be the output of this code snippet?
- 21.Understanding DRF Serializers and Nested Relationships
- 22.DRF Viewsets and Router Configuration Scenario
- 23.Authentication and Permissions in DRF
- 24.Pagination and Filtering in DRF Scenario
- 25.Custom Validation in DRF Serializers
- 26.Status Codes and Exception Handling in DRF
- 27.Throttling and Rate Limiting Scenario
- 28.Request and Response Cycle with Middleware
- 29.Advanced Serializer Optimization and Performance
