我正在尝试使用 get_queryset
返回自定义 json,但总是得到 404 错误
作为响应。
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 数据的正确响应。我做错了什么?
最佳答案
如果您不需要 ModelViewSet 并且只想在 GET 请求上自定义 JSON
您也可以使用 APIView
,不需要模型
class MyOwnView(APIView):
def get(self, request):
return Response({'some': 'data'})
和
urlpatterns = [
url(r'^my-own-view/$', MyOwnView.as_view()),
]
使用模型 View 集
您已将自定义 JSON 放入 get_queryset,这是错误的。如果您想使用 ModelViewSet
,这本身就足够了:
class TestViewSet(viewsets.ModelViewSet):
queryset = Test.objects.all()
serializer_class = TestSerializer
这个 ModelViewSet
带有 .list()
的默认实现, .retrieve()
, .create()
, .update()
, 和 .destroy()
.您可以根据需要覆盖(自定义)哪些
从 .retrieve()
返回自定义 JSON和/或 .list()
在 ModelViewSet
例如覆盖 .retrieve()
检索单个对象时返回自定义 View 。我们可以看看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)
以返回自定义 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'})
关于python - 如何在 Django REST 框架中返回自定义 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35019030/