Filtering API responses based on URL query parameters (e.g. /api/articles/?category=devops&status=published) in Django REST Framework ViewSets is implemented by overriding the get_queryset() method.
DRF ViewSet Filtering Code Example
from rest_framework import viewsets
from .models import Article
from .serializers import ArticleSerializer
class ArticleViewSet(viewsets.ModelViewSet):
serializer_class = ArticleSerializer
def get_queryset(self):
queryset = Article.objects.all()
# Extract query parameters from HTTP GET request
category_slug = self.request.query_params.get('category', None)
status_val = self.request.query_params.get('status', None)
if category_slug is not None:
queryset = queryset.filter(category__slug=category_slug)
if status_val is not None:
queryset = queryset.filter(status=status_val)
return queryset
Comments and corrections