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

views.pypython
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