Generic Views & Mixins
DRF generic views handle common API patterns with minimal code — list, create, retrieve, update, destroy. Mixins provide individual actions that can be combined. This is the recommended approach for standard CRUD APIs.
20 min•By Priygop Team•Updated 2026
Generic Views
- ListAPIView — GET list
- CreateAPIView — POST create
- RetrieveAPIView — GET single
- UpdateAPIView — PUT/PATCH update
- DestroyAPIView — DELETE
- ListCreateAPIView — GET list + POST create
- RetrieveUpdateDestroyAPIView — GET + PUT + DELETE
Generic View CRUD
Generic View CRUD
# blog/views.py
# from rest_framework import generics
# from .models import Post
# from .serializers import PostSerializer
# List + Create (GET /api/posts/, POST /api/posts/)
# class PostListCreateView(generics.ListCreateAPIView):
# queryset = Post.objects.filter(published=True)
# serializer_class = PostSerializer
#
# def perform_create(self, serializer):
# serializer.save(author=self.request.user)
# Retrieve + Update + Delete (GET/PUT/DELETE /api/posts/1/)
# class PostDetailView(generics.RetrieveUpdateDestroyAPIView):
# queryset = Post.objects.all()
# serializer_class = PostSerializer
#
# def get_queryset(self):
# if self.request.method in ['PUT', 'PATCH', 'DELETE']:
# return Post.objects.filter(author=self.request.user)
# return Post.objects.filter(published=True)
# Using Mixins for custom combinations
# from rest_framework import mixins, generics
# class PostListView(mixins.ListModelMixin,
# mixins.CreateModelMixin,
# generics.GenericAPIView):
# queryset = Post.objects.all()
# serializer_class = PostSerializer
#
# def get(self, request, *args, **kwargs):
# return self.list(request, *args, **kwargs)
# def post(self, request, *args, **kwargs):
# return self.create(request, *args, **kwargs)Tip
Tip
Override perform_create() to inject extra data like request.user. Override get_queryset() for dynamic filtering.
Diagram
Loading diagram…
QuerySets are LAZY — no DB hit until evaluated.
Common Mistake
Warning
Not overriding perform_create to set the user. Without it, the author field will be empty or cause an error.
Practice Task
Note
(1) Use CreateModelMixin with GenericAPIView. (2) Override perform_create to set author. (3) Test with POST requests.
Quick Quiz
Key Takeaways
- DRF generic views handle common API patterns with minimal code — list, create, retrieve, update, destroy.
- ListAPIView — GET list
- CreateAPIView — POST create
- RetrieveAPIView — GET single