首页 > 解决方案 > Django REST Framework - request.get_params 中仅显示第一个查询参数

问题描述

我想使用多个查询参数在视图中过滤查询集,但“request.query_params”只能获取我的查询字符串中的第一个查询参数。

这是我的 URLConf:

urlpatterns = [
   ...
   re_path(r'^descsearch/$', views.DescriptionSearchView.as_view(), name='descsearch'),
]

这是我试图从查询字符串(“description”和“descSearchMethod”)中获取两个查询参数的视图顶部:

class DescriptionSearchView(generics.ListAPIView):
serializer_class = DrawingSerializer

def get_queryset(self):
    print("request.query_params: " + str(self.request.query_params))
    description = self.request.query_params.get('description')
    print("description: " + description)
    descSearchMethod = self.request.query_params.get('descSearchMethod')
    print("descSearchMethod: " + descSearchMethod)
    ...

当我使用 curl 发出这个 GET 请求时:

curl -X GET http://127.0.0.1:8000/api/descsearch/?description=O-RING&descSearchMethod=and

Django 控制台中的打印语句显示只有第一个查询参数“description”在 QueryDict 中。

request.query_params: <QueryDict: {'description': ['O-RING']}>
description: O-RING
Internal Server Error: /api/descsearch/
...

如果我切换顺序以使“descSearchMethod”成为第一个查询参数,则只有它显示。

为什么 QueryDict 中只显示第一个查询参数?

标签: pythondjangoapidjango-rest-framework

解决方案


我想到了!我只需要在 curl 命令中的 URL 周围添加引号,如下所示:

curl -X GET 'http://127.0.0.1:8000/api/descsearch/?description=O-RING&descSearchMethod=and'

我在 Windows 上的 Git Bash 中发出 curl 命令。


推荐阅读