4
You can override viewset’s list
method for this:
from rest_framework import status
from rest_framework.response import Response
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
if not queryset.exists():
return Response({"detail": "Not found."}, status=status.HTTP_404_NOT_FOUND)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
4
I think the easiest way for you (and maybe the most general) will be to override the list() method of ModelViewSet. This is the code (from mixins.py):
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
Above is the original code. You can then override it in your class, for example, you can add the following lines (after queryset = and before page =)
...
if queryset.count():
raise exceptions.NotFound()
...
Actually, you can do what ever you want now. You can also change the function to return single object.
- [Django]-How can I test to see if a class contains a particular attribute?
- [Django]-How can you use the @cache_page decorator with Django class based views?
- [Django]-Django: Values_list returns id from choice field instead of name
- [Django]-Error with Django User : "AttributeError: 'User' object has no attribute 'get' "
Source:stackexchange.com