I am trying to return custom json with get_queryset but always get 404 error in response.
class TestViewSet(viewsets.ModelViewSet): """ API endpoint that allows groups to be viewed or edited. """ queryset = Test.objects.all() serializer_class = TestSerializer def get_queryset(self): if self.request.method == "GET": content = {'user_count': '2'} return HttpResponse(json.dumps(content), content_type='application/json') If I delete everything starting from def I'll got correct response with standard json data. What I am doing wrong?
You can also use an APIView, which doesn't require a model
class MyOwnView(APIView): def get(self, request): return Response({'some': 'data'}) and
urlpatterns = [ url(r'^my-own-view/$', MyOwnView.as_view()), ] You've put the custom JSON into get_queryset, that's wrong. If you want to use a ModelViewSet, this by itself should be enough:
class TestViewSet(viewsets.ModelViewSet): queryset = Test.objects.all() serializer_class = TestSerializer This ModelViewSet comes with default implementations for .list(), .retrieve(), .create(), .update(), and .destroy(). Which are available for you to override (customize) as needed
.retrieve() and/or .list() in ModelViewSet E.g. to override .retrieve() to return custom view when retrieving a single object. We can have a look at the default implementation which looks like this:
def retrieve(self, request, *args, **kwargs): instance = self.get_object() serializer = self.get_serializer(instance) return Response(serializer.data) So as an example to return custom JSON:
class TestViewSet(viewsets.ModelViewSet): queryset = Test.objects.all() serializer_class = TestSerializer def retrieve(self, request, *args, **kwargs): return Response({'something': 'my custom JSON'}) def list(self, request, *args, **kwargs): return Response({'something': 'my custom JSON'})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With