我在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。如果有人能解释为什么会这样,我将不胜感激。
答案 0 :(得分:0)
事实证明,这是一个非常古老的问题。我希望这在文档中更加突出。西蒙·威尔森的解释如下:
“”“
这是一个功能,而不是错误。如果要获取键的值列表,请使用以下命令:
values = request.POST.getlist('key')
其背后的原因是,API方法应始终返回字符串或列表,但绝不能同时返回。 Web应用程序中的常见情况是将表单键与单个值相关联,因此[]语法就是这样做的。当您打算对一个值多次使用键时,getlist()会在某些场合(像您一样)出现。 “””-13年前的西蒙·威尔森。