在 Django 中访问列表 request.POST

Accessing Lists in Django request.POST

我无法访问我的 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" 值之前,它们看起来非常相似。用户 select 通过我表单上的 MultipleSelect 小部件发送这些报告,我的代码正在遍历提供的 ID 号。但是,无论我select被举报多少次,我都只能得到一个ID。如果有人能解释为什么会这样,我将不胜感激。

事实证明这是一个非常老派的问题。不过,我希望这在文档中更加突出。 Simon Willson 的解释如下:

"""

这是一个功能,不是错误。如果您想要一个键的值列表,请使用以下内容:

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

这背后的原因是 API 方法应该始终 return 字符串或列表,但绝不能两者兼而有之。 Web 应用程序中的常见情况是将表单键与单个值相关联,因此这就是 [] 语法的作用。当您打算多次使用一个键来获得一个值时,getlist() 就可以用于这种情况(比如您的情况)。 """ - Simon Willson,13 年前。