DRF ListAPIView пользовательский возврат не объект - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь настроить ListAPIView, чтобы вернуть пользовательский объект. По умолчанию DRF возвращает объект в массиве, мне нужен только настроенный объект.

class PostDetailApiView(ListAPIView, CreateAPIView):
    serializer_class = PostSerializer
    permission_classes = [AllowAny]

    def get_queryset(self, request, *args, **kwargs):
        response = super().get_queryset(request, *args, **kwargs)

        return Response({
                'status': 200,
                'message': 'Post delivered!!',
                'data': response.data
            })

Я получаю ошибку:

lib/python3.7/site-packages/django/template/response.py", line 120, in __iter__
    'The response content must be rendered before it can be iterated over.'
**django.template.response.ContentNotRenderedError: The response content must be rendered before it can be iterated over.**
[03/May/2020 02:34:14] "GET /en-us/blog/api/posts/VueJS%20blog%20in%20progress HTTP/1.1" 500 59

Ошибка исчезает, когда я возвращаю пустой массив, например :

def get_queryset(self):
    queryset = []
    queryset.append(Post.objects.get(title=self.kwargs["title"]))
    return queryset

Как я могу вернуть такой объект из представлений на основе классов?:

{
    "status": 200,
    "message": "Post created!",
    "data": {}
}

Спасибо

1 Ответ

2 голосов
/ 03 мая 2020
# You just need to override your class from APIView class and write your custom response

from rest_framework.views import APIView

class PostDetailApiView(APIView):
    permission_classes = [AllowAny]

    def get(self, request, format=None):
        title = request.data.get("title")
        post = Post.objects.filter(title=title).values('title')

        return Response({
            'status': 200,
            'message': 'Post delivered!!',
            'data': list(post)
        })
...