【问题标题】:Access Json object name访问 Json 对象名称
【发布时间】:2022-02-11 04:15:14
【问题描述】:

我想在前端使用 request.data.columns 获取数据。我可以使用 ViewSet 和 list 方法来完成,但如何使用 generics.APIView 来完成。 以下是我的视图集和泛型代码:

class TestList(viewsets.ViewSet):
     queryset = Test.objects.all()
     def list(self,request):
         serializer = TestSerializer(self.queryset, many = True)
         return Response({'columns': serializer.data})

class TestList(generics.RetriveAPIView):
    queryset = Test.objects.all()
    serializer_class = TestSerializer

【问题讨论】:

  • 你遇到了什么错误?
  • 显示你的 urls.py / 路由器代码。
  • 这是我的 url 路径 --> path('getTest/', TestList.as_view(), name='getTest'),

标签: json django django-rest-framework


【解决方案1】:
class TestList(APIView):
     queryset = Test.objects.all()
     def list(self,request):
         serializer = TestSerializer(self.queryset, many = True)
         return Response({'columns': serializer.data})

像这样改变你的 urls.py。

path(r"url", TestList.as_view({"get": "list"}))

【讨论】:

  • 尝试此操作后,我遇到此错误,“as_view() 采用 1 个位置参数,但给出了 2 个”。
  • 感谢杰克昆的回复。我必须对您给定的代码进行一些更改,我在 list 方法之后添加 queryset = self.get_queryset() 并且不必更改 url 路径。
【解决方案2】:

正确代码:

class TestList(APIView):
     queryset = Test.objects.all()
     def list(self,request):
         queryset = self.get_queryset()
         serializer = TestSerializer(queryset, many = True)
         return Response({'columns': serializer.data})

关于为什么我必须添加 queryset = self.get_queryset() 而不是直接访问 self.queryset 的详细信息。来自官方 drf 文档:

queryset - 应该用于从此视图返回对象的查询集。通常,您必须设置此属性,或覆盖 get_queryset() 方法。如果您要覆盖视图方法,请务必调用 get_queryset() 而不是直接访问此属性,因为查询集将被评估一次,并且这些结果将被缓存以供所有后续请求使用。

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多