访问Django request.POST中的列表

问题描述 投票:0回答:1

我无法访问我的post函数中表单返回的所有数据。我注意到当我打印request.POST与我的代码访问此数据时显示的内容之间存在显着差异。希望有人可以向我解释这一点。

print(request.POST)的输出:

print(request.POST)
<QueryDict: {'csrfmiddlewaretoken': ['AXMPO...'],
 'start_date': ['2019-03-01'], 'end_date': ['2019-03-26'], 
'reports': ['4', '1']}>

为了检查我的代码处理的数据,我使用json模块来查看数据。调试期间我的代码行为符合这种表示:

json.dumps(request.POST)
'{"csrfmiddlewaretoken": "AXMPO...",
 "start_date": "2019-03-01", "end_date": "2019-03-26",
 "reports": "1"}'

在你看到"reports"值之前,它们看起来非常相似。用户通过表单上的MultipleSelect小部件选择这些报告,我的代码正在迭代提供的ID号。但是,无论我选择多少报告,我只能获得一个ID。如果有人能解释为什么会这样,我会真诚地感激它。

json httprequest python-3.7 django-2.1
1个回答
0
投票

事实证明这是一个非常古老的学校问题。我希望这在文档中更为突出。 Simon Willson的解释如下:

"""

这是一个功能,而不是一个bug。如果需要键的值列表,请使用以下命令:

values = request.POST.getlist('key')

这背后的原因是API方法应该始终返回字符串或列表,但不能同时返回两者。 Web应用程序中的常见情况是表单键与单个值相关联,因此这是[]语法的作用。当你打算多次使用一个键作为单个值时,getlist()适用于那些场合(比如你的)。 “” - 西蒙威尔森,13年前。

© www.soinside.com 2019 - 2024. All rights reserved.