Django Rest框架:将queryset传递给Response()

2024-10-01 17:37:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的应用程序。在视图,对于get query,我正在获取queryset形式的模型列表,并尝试传递给我的Response()

在组织视图.py在

 def get(self,request):
    user = self.request.user
    result = OrganizationModel.object.all()
     serializer = OrganizationSerializer("json", list(result), many=True)
     return Response(serializer, status=status.HTTP_200_OK)

在组织模型.py在

^{pr2}$

我收到以下错误:

Traceback (most recent call last):
 File "/Users/richagupta/VirtualEnvs/py35/lib/python3.5/site-packages/django/core/handlers/base.py", line 174, in get_response
 response = self.process_exception_by_middleware(e, request)
  File "/Users/richagupta/VirtualEnvs/py35/lib/python3.5/site-packages/django/core/handlers/base.py", line 172, in get_response
response = response.render()
  File "/Users/richagupta/VirtualEnvs/py35/lib/python3.5/site-packages/django/template/response.py", line 160, in render
self.content = self.rendered_content
File "/Users/richagupta/VirtualEnvs/py35/lib/python3.5/site-packages/rest_framework/response.py", line 71, in rendered_content
ret = renderer.render(self.data, media_type, context)
File "/Users/richagupta/VirtualEnvs/py35/lib/python3.5/site-packages/rest_framework/renderers.py", line 104, in render
separators=separators
 File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/__init__.py", line 237, in dumps
**kw).encode(obj)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/richagupta/VirtualEnvs/py35/lib/python3.5/site-packages/rest_framework/utils/encoders.py", line 64, in default
 return super(JSONEncoder, self).default(obj)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/encoder.py", line 180, in default
 raise TypeError(repr(o) + " is not JSON serializable")
 TypeError: OrganizationSerializer('json', [<Organization: zeotap>, <Organization: movial>, <Organization: Redbull>, <Organization: mogey>, <Organization: vizury>], many=True):
id = IntegerField()
name = CharField() is not JSON serializable

如果我在get call中执行以下操作:

serialized_q= json.dumps(list(queryset), cls=DjangoJSONEncoder)
return Response(serialized_q, status=status.HTTP_200_OK)

我没有得到错误,但结果如下:

 "[{\"id\": 1, \"soft_delete\": false, \"created_at\": \"2016-04-14T13:35:21.636Z\", \"name\": \"org1\", \"updated_at\": \"2016-04-14T13:35:21.636Z\"}, 
  {\"id\": 4, \"soft_delete\": false, \"created_at\": \"2016-04-14T13:37:02.230Z\", \"name\": \"org2\", \"updated_at\": \"2016-04-14T13:37:02.230Z\"}]"

我应该如何将queryset传递给响应方法?在


Tags: inpyselfjsonresponselibpackagesline
2条回答

您并不真的想重写get方法,最好重写get queryset

class ViewSet(ModelViewSet):
    queryset = Model.objects.all()
    serializer_class = ModelSerializer

    def get_queryset(self): #this method is called inside of get
        queryset = self.queryset.filter(doyourfiltering=True)
        return queryset

您可以直接在这里返回一个queryset,Django将为您序列化它。你可以通过自我请求. 在

我认为您只能使用序列化程序序列化单个模型。所以不是:

serializer = OrganizationSerializer("json", list(result), many=True)

尝试:

^{pr2}$

然后只需:

return Response(data)

参见:http://www.django-rest-framework.org/api-guide/serializers/#serializing-objects

相关问题 更多 >

    热门问题