如何在Django Rest Framework ViewSet中获取额外的参数

时间:2018-09-26 17:30:14

标签: python django django-rest-framework

我必须使用Django Rest Framework实现一个通过这种方式接收额外参数的端点:

GET .../hotels_in_period/?check_in=2018-09-30&check_out=2018-10-10

端点应该同时接收参数check-incheck-out,但是我不知道如何在视图集的list方法中获取它们。我以为它们将以request.data的形式提供,但没有。

我将不胜感激。

1 个答案:

答案 0 :(得分:2)

使用request.query_params

来自文档

  

request.query_params 是更正确命名的同义词    request.GET

     

为使代码更清晰,我们建议使用request.query_params   而不是Django的标准request.GET。这样做将有助于保持   您的代码库更加正确和明显-任何HTTP方法类型都可能   包括查询参数,而不仅仅是GET请求

示例:

class TagsAPIView(APIView):
    def get(self, request):
        search = request.query_params.get('search')
        if search:
            data = get_paginated_data(
                data=TagSerializer(
                    Tag.objects.filter(name__contains=search).annotate(posts_count=Count('posts')).order_by(
                        '-posts_count').exclude(posts__isnull=True), many=True).data,
                page=request.query_params.get('page'),
                limit=request.query_params.get('limit'),
                url=F"/social/tags/?search={search}"
            )
        else:
            data = get_paginated_data(
                data=TagSerializer(
                    Tag.objects.all().annotate(posts_count=Count('posts')).order_by('-posts_count').exclude(
                        posts__isnull=True),
                    many=True).data,
                page=request.query_params.get('page'),
                limit=request.query_params.get('limit'),
                url=F"/social/tags/?"
            )
        return JsonResponse(data)