我试图用返回自定义json,get_queryset但总是得到404 error响应。
get_queryset
404 error
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')
如果我删除所有内容,def我将获得标准json数据的正确响应。我做错了什么?
def
您也可以使用APIView,不需要模型
APIView
class MyOwnView(APIView): def get(self, request): return Response({'some': 'data'})
和
urlpatterns = [ url(r'^my-own-view/$', MyOwnView.as_view()), ]
您已将自定义JSON放入get_queryset中,这是错误的。如果您想使用ModelViewSet,仅此一项就足够了:
ModelViewSet
class TestViewSet(viewsets.ModelViewSet): queryset = Test.objects.all() serializer_class = TestSerializer
这种ModelViewSet带有默认实现.list(),.retrieve(),.create(),.update(),和.destroy()。哪些可供您根据需要覆盖(自定义)
.list()
.retrieve()
.create()
.update()
.destroy()
例如,重写.retrieve()以在检索单个对象时返回自定义视图。我们可以看一下默认实现,如下所示:
def retrieve(self, request, *args, **kwargs): instance = self.get_object() serializer = self.get_serializer(instance) return Response(serializer.data)
因此,以返回自定义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'})