Bird
Raised Fist0
Djangoframework~20 mins

Generic views in DRF in Django - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
DRF Generic Views Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this DRF generic view code?

Consider this Django REST Framework generic view:

from rest_framework import generics
from myapp.models import Book
from myapp.serializers import BookSerializer

class BookList(generics.ListCreateAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

What HTTP methods does this view support by default?

APUT and DELETE
BGET and POST
CPOST only
DGET only
Attempts:
2 left
💡 Hint

Think about what ListCreateAPIView is designed for.

📝 Syntax
intermediate
2:00remaining
Which option correctly overrides the get_queryset method in a DRF generic view?

You want to filter the queryset based on the current user in a generic view. Which code snippet is correct?

Django
from rest_framework import generics
from myapp.models import Article
from myapp.serializers import ArticleSerializer

class UserArticles(generics.ListAPIView):
    serializer_class = ArticleSerializer

    def get_queryset(self):
        # Your code here
        pass
Areturn Article.objects.filter(author=self.request.user)
Breturn Article.objects.filter(author=request.user)
Creturn Article.objects.filter(author=user)
Dreturn Article.objects.filter(author=self.user)
Attempts:
2 left
💡 Hint

Remember how to access the request object inside a view method.

state_output
advanced
2:00remaining
What is the response status code when creating an object with CreateAPIView?

Using Django REST Framework's CreateAPIView, what is the typical HTTP status code returned after successfully creating an object?

A204 No Content
B200 OK
C400 Bad Request
D201 Created
Attempts:
2 left
💡 Hint

Think about the standard HTTP status code for resource creation.

🔧 Debug
advanced
2:00remaining
Why does this DRF generic view raise an AttributeError?

Given this view code:

from rest_framework import generics
from myapp.models import Product
from myapp.serializers import ProductSerializer

class ProductDetail(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = ProductSerializer

    def get_object(self):
        return Product.objects.get(pk=self.kwargs['id'])

When accessing this view, it raises KeyError: 'id'. Why?

AThe view should use self.get_object() without accessing kwargs directly
BThe view should use self.kwargs from the method parameter, not self.kwargs attribute
CThe view should use self.kwargs, but it is missing because URL pattern does not pass 'id'
DThe view should use self.request instead of self.kwargs
Attempts:
2 left
💡 Hint

Check how URL parameters are passed to the view.

🧠 Conceptual
expert
3:00remaining
Which generic view class should you use to implement a read-only endpoint that returns a list and detail of objects?

You want to create an API endpoint that allows users to only read data (no create, update, or delete). It should support listing all objects and retrieving a single object by ID. Which DRF generic view class is the best choice?

AReadOnlyModelViewSet
BListCreateAPIView
CRetrieveUpdateDestroyAPIView
DListAPIView combined with RetrieveAPIView
Attempts:
2 left
💡 Hint

Think about a class that supports both list and detail read-only actions in one place.

Practice

(1/5)
1. What is the main purpose of using generic views in Django REST Framework (DRF)?
easy
A. To provide ready-made classes that simplify common API tasks like CRUD operations
B. To write raw SQL queries directly in views
C. To handle user authentication manually
D. To create HTML templates for the frontend

Solution

  1. 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.
  2. 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.
  3. Final Answer:

    To provide ready-made classes that simplify common API tasks like CRUD operations -> Option A
  4. Quick 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
A. class BookList(generics.ListAPIView):\n queryset = Book.objects.all()\n serializer_class = BookSerializer
B. class BookList(generics.CreateAPIView):\n queryset = Book.objects.all()\n serializer_class = BookSerializer
C. class BookList(generics.UpdateAPIView):\n queryset = Book.objects.all()\n serializer_class = BookSerializer
D. class BookList(generics.DestroyAPIView):\n queryset = Book.objects.all()\n serializer_class = BookSerializer

Solution

  1. Step 1: Identify the generic view for listing objects

    The ListAPIView is designed to list all objects of a model.
  2. 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.
  3. Final Answer:

    class BookList(generics.ListAPIView):\n queryset = Book.objects.all()\n serializer_class = BookSerializer -> Option A
  4. Quick 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 = ArticleSerializer
medium
A. Supports only POST method to create a new article
B. Supports GET, PUT, PATCH, DELETE methods to retrieve, update, or delete an article
C. Supports GET method to list all articles
D. Supports DELETE method only to remove all articles

Solution

  1. Step 1: Understand RetrieveUpdateDestroyAPIView

    This generic view supports retrieving a single object (GET), updating it (PUT/PATCH), and deleting it (DELETE).
  2. 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.
  3. Final Answer:

    Supports GET, PUT, PATCH, DELETE methods to retrieve, update, or delete an article -> Option B
  4. Quick 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 = UserSerializer
medium
A. CreateAPIView does not exist in DRF
B. serializer_class should be named serializer
C. Class name should be lowercase
D. Missing queryset attribute causes runtime error

Solution

  1. 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.
  2. 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).
  3. Final Answer:

    Missing queryset attribute causes runtime error -> Option D
  4. Quick 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
A. Use generics.ListAPIView only because creation should be separate
B. Use generics.RetrieveUpdateDestroyAPIView because it handles all CRUD operations
C. Use generics.ListCreateAPIView because it supports both listing and creating in one view
D. Use generics.CreateAPIView only because listing is not needed

Solution

  1. Step 1: Identify the requirement

    The endpoint must list all products and allow creating new ones in the same view.
  2. Step 2: Match generic view to requirement

    ListCreateAPIView is 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.
  3. Final Answer:

    Use generics.ListCreateAPIView because it supports both listing and creating in one view -> Option C
  4. Quick 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