python - 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 中只显示第一个查询参数?
解决方案
我想到了!我只需要在 curl 命令中的 URL 周围添加引号,如下所示:
curl -X GET 'http://127.0.0.1:8000/api/descsearch/?description=O-RING&descSearchMethod=and'
我在 Windows 上的 Git Bash 中发出 curl 命令。
推荐阅读
- authentication - Keycloak:自定义用户存储提供程序在用户登录期间多次调用 getUserById
- javascript - 按钮在桌面上可以正常工作,但在移动设备上不起作用
- sql-server - 用户 'rpa' 登录失败。(18456) (SQLDriverConnect)")
- reactjs - EXPO:设置 react-native-action-sheet
- typo3 - TYPO3 通过typoscript lib 包含一个扩展
- environment-variables - ExpandEnvironmentStringsA() 字符串下标超出范围
- flutter - 颤振包:facebook_audience_network 不支持空安全:
- scala - Spark ML Word2Vec 的变换函数中的 wordIndices 和 offset 到底是什么?
- networking - 如何在 Docker Swarm 专用网络中使用 Traefik v2.x?
- sql - 创建一个触发器,从另一个表的列中减去 1