Generic views in Django REST Framework help you quickly create common API endpoints without writing repetitive code.
Generic views in DRF in Django
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Django
from rest_framework import generics class MyModelListCreateView(generics.ListCreateAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer
Use queryset to tell the view which data to work with.
Use serializer_class to define how data is converted to and from JSON.
Examples
Django
class BookListCreateView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializerDjango
class BookDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializerDjango
class AuthorListView(generics.ListAPIView):
queryset = Author.objects.all()
serializer_class = AuthorSerializerSample Program
This simple API view lets users see all books and add new books using HTTP GET and POST requests.
Django
from rest_framework import generics from myapp.models import Book from myapp.serializers import BookSerializer class BookListCreateView(generics.ListCreateAPIView): queryset = Book.objects.all() serializer_class = BookSerializer
Important Notes
Generic views save time but you can customize them by overriding methods if needed.
Always define queryset and serializer_class for generic views to work.
Use URL patterns with path converters like <int:pk> to connect detail views.
Summary
Generic views provide ready-made classes for common API tasks.
They reduce repeated code and speed up API development.
Use them with a queryset and serializer to quickly build CRUD endpoints.
Practice
1. What is the main purpose of using generic views in Django REST Framework (DRF)?
easy
Solution
Step 1: Understand generic views role
Generic views in DRF offer pre-built classes to handle common API tasks such as listing, creating, updating, and deleting data.Step 2: Compare options
Options B, C, and D describe unrelated tasks: raw SQL, manual auth, and frontend templates, which are not the main purpose of generic views.Final Answer:
To provide ready-made classes that simplify common API tasks like CRUD operations -> Option AQuick Check:
Generic views simplify CRUD = A [OK]
Hint: Generic views = ready-made CRUD classes in DRF [OK]
Common Mistakes:
- Confusing generic views with authentication classes
- Thinking generic views handle frontend rendering
- Assuming generic views require manual SQL
2. Which of the following is the correct way to use a generic view to list all objects of a model named
Book in DRF?easy
Solution
Step 1: Identify the generic view for listing objects
TheListAPIViewis designed to list all objects of a model.Step 2: Match the class with the task
Options B, C, and D correspond to creating, updating, and deleting respectively, which do not list objects.Final Answer:
class BookList(generics.ListAPIView):\n queryset = Book.objects.all()\n serializer_class = BookSerializer -> Option AQuick Check:
List all objects = ListAPIView = A [OK]
Hint: List objects use ListAPIView class [OK]
Common Mistakes:
- Using CreateAPIView for listing data
- Confusing UpdateAPIView with ListAPIView
- Forgetting to set queryset or serializer_class
3. Given this DRF generic view code, what will be the HTTP method supported and the main action performed?
class ArticleDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Article.objects.all()
serializer_class = ArticleSerializermedium
Solution
Step 1: Understand RetrieveUpdateDestroyAPIView
This generic view supports retrieving a single object (GET), updating it (PUT/PATCH), and deleting it (DELETE).Step 2: Match HTTP methods to actions
Supports GET, PUT, PATCH, DELETE methods to retrieve, update, or delete an article correctly describes the supported methods (GET for retrieve, PUT/PATCH for update, DELETE for destroy) for a single article. Options A, C, and D describe incorrect methods or actions.Final Answer:
Supports GET, PUT, PATCH, DELETE methods to retrieve, update, or delete an article -> Option BQuick Check:
RetrieveUpdateDestroyAPIView = GET, PUT/PATCH, DELETE [OK]
Hint: RetrieveUpdateDestroyAPIView handles GET, PUT/PATCH, DELETE [OK]
Common Mistakes:
- Thinking it supports POST for creation
- Confusing list view with detail view
- Assuming it deletes all objects instead of one
4. Identify the error in this DRF generic view code snippet:
class UserCreate(generics.CreateAPIView):
serializer_class = UserSerializermedium
Solution
Step 1: Check required attributes for CreateAPIView
While CreateAPIView requires serializer_class, it also typically needs a queryset attribute to function properly without errors, especially in standard setups with permissions.Step 2: Identify the error
The missing queryset attribute causes runtime errors in many scenarios. Options A, B, and D are incorrect: CreateAPIView does exist (A), serializer_class is the correct name (B), and class names should use PascalCase (D).Final Answer:
Missing queryset attribute causes runtime error -> Option DQuick Check:
Missing queryset = runtime error [OK]
Hint: Always set queryset with generic views unless serializer handles all [OK]
Common Mistakes:
- Omitting queryset attribute
- Renaming serializer_class incorrectly
- Thinking CreateAPIView is invalid
- Using lowercase class names
5. You want to create a DRF API endpoint that allows listing all
Product items and creating new ones in the same view. Which generic view class should you use and why?hard
Solution
Step 1: Identify the requirement
The endpoint must list all products and allow creating new ones in the same view.Step 2: Match generic view to requirement
ListCreateAPIViewis the correct choice as it supports GET (listing) and POST (creating). Use generics.RetrieveUpdateDestroyAPIView because it handles all CRUD operations (RetrieveUpdateDestroyAPIView) is for single-object detail operations. Options A and C support only a single action each.Final Answer:
Use generics.ListCreateAPIView because it supports both listing and creating in one view -> Option CQuick Check:
List + Create = ListCreateAPIView [OK]
Hint: ListCreateAPIView combines list and create in one view [OK]
Common Mistakes:
- Using RetrieveUpdateDestroyAPIView for list/create
- Choosing only CreateAPIView or ListAPIView alone
- Not combining actions in one view
