【问题标题】:Django REST Framework - Only first query parameter showing in request.get_paramsDjango REST Framework - request.get_params 中仅显示第一个查询参数
【发布时间】:2020-04-17 20:08:21
【问题描述】:

我想使用多个查询参数过滤视图中的查询集,但“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 中只显示第一个查询参数?

【问题讨论】:

  • 你能打印self.request.GET吗?

标签: python django api django-rest-framework


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-03-27
    • 2016-11-17
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2022-11-13
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多