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?

推荐答案

如果您不需要ModelViewSet而只需要GET请求上的自定义JSON

你也可以使用APIView,它不需要模型

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

and

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

使用ModelViewSet

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

ModelViewSet附带.list().retrieve().create().update().destroy()的默认实现.这些选项可供您根据需要覆盖(自定义)

Returning custom JSON from .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)

以返回自定义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'})

Json相关问答推荐

如何在生产环境中更改 Flutter 应用程序中的数据模型?

使用 jq 同时迭代数组

PowerShell - 如何迭代 PSCustomObject 嵌套对象?

Powershell JSON 操作

hook到 Decodable.init() 以获得未指定的键?

Golang / Go - 如果结构没有字段,如何将其编组为空?

如何在 Asp.net Core Web Api 中默认使用 Newtonsoft.Json?

使用 Swift 4 中的 JSONDecoder,缺少的键可以使用默认值而不是可选属性吗?

是否可以通过适当的 JavaScript 字符串转义来利用 JSON 响应进行 XSS 攻击?

在 Swift 中解码 JSON 时出现“无法读取数据,因为它丢失了”错误

如何删除json对象键和值.?

dump() 缺少 1 个必需的位置参数:python json 中的“fp”

Swift 4 可解码,直到解码时才知道密钥

AWS:如何修复 S3 事件用“+”登录 json 中的对象键名替换空格

如何在本地存储中存储对象数组?

处理响应 - SyntaxError:使用模式时输入意外结束:'no-cors'

什么是类型和类型令牌?

“现代”浏览器一次可以“处理”多少个 HTML 元素?

使用 jq 就地修改 json 中的键值

ASP.NET Core 返回带有状态码的 JSON