我无法访问我的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。如果有人能解释为什么会这样,我会真诚地感激它。
事实证明这是一个非常古老的学校问题。我希望这在文档中更为突出。 Simon Willson的解释如下:
"""
这是一个功能,而不是一个bug。如果需要键的值列表,请使用以下命令:
values = request.POST.getlist('key')
这背后的原因是API方法应该始终返回字符串或列表,但不能同时返回两者。 Web应用程序中的常见情况是表单键与单个值相关联,因此这是[]语法的作用。当你打算多次使用一个键作为单个值时,getlist()适用于那些场合(比如你的)。 “” - 西蒙威尔森,13年前。