Cómo devolver JSON personalizado en Django REST Framework

Estoy intentando devolver json personalizado con get_queryset pero siempre obtengo un 404 error en respuesta.

 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') 

Si borro todo a partir de la def , obtendré la respuesta correcta con los datos estándar de json. ¿Que estoy haciendo mal?

Related of "Cómo devolver JSON personalizado en Django REST Framework"

Si no necesita un ModelViewSet y solo desea JSON personalizado en una solicitud GET

También puede usar un APIView , que no requiere un modelo

 class MyOwnView(APIView): def get(self, request): return Response({'some': 'data'}) 

y

 urlpatterns = [ url(r'^my-own-view/$', MyOwnView.as_view()), ] 

Con un ModelViewSet

Has puesto el JSON personalizado en get_queryset, eso es incorrecto. Si desea utilizar un ModelViewSet , esto debería ser suficiente:

 class TestViewSet(viewsets.ModelViewSet): queryset = Test.objects.all() serializer_class = TestSerializer 

Este ModelViewSet viene con implementaciones predeterminadas para .list() , .retrieve() , .create() , .update() y .destroy() . Las cuales están disponibles para que las anule (personalice) según sea necesario

Devolviendo JSON personalizado desde .retrieve() y / o .list() en ModelViewSet

Por ejemplo, para anular .retrieve() para devolver una vista personalizada al recuperar un solo objeto. Podemos echar un vistazo a la implementación predeterminada que se ve así :

 def retrieve(self, request, *args, **kwargs): instance = self.get_object() serializer = self.get_serializer(instance) return Response(serializer.data) 

Así como un ejemplo para devolver JSON personalizado:

 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'})