取消选中复选框会在Django中生成一个值

时间:2011-07-12 15:35:03

标签: html django webforms checkbox

我问我的Django应用程序用户有很多是/否问题,我想使用复选框而不是单选按钮。问题是我希望每个复选框都有一个value,而不是每个复选框。

我发现这个技巧使用额外的hidden checkboxes,这看起来很不错,但one of the comments在我的脑海中引起了一些疑惑:

  

这不正确。这两个值都将被提交,HTML允许[多个]值具有相同的名称。

这是真的吗?如果是这样,Django HttpRequest.POST将如何处理同名/密钥的多个值?

1 个答案:

答案 0 :(得分:1)

由于HTML允许用户为单个密钥提交多个值,因此Django必须使用专门的数据结构来满足这种可能性。结果是MultiValueDict,request.GETrequest.POST是引擎盖下的实例。您可以在此处浏览该结构的代码:http://djangoapi.quamquam.org/trunk/django.utils.datastructures.MultiValueDict-class.html

简短的故事是,您可以使用简单的字典查找(例如request.POST['mykey'])和所有值的列表(例如request.POST.getlist('mykey'))来访问第一个值。

也就是说,正如其他一些评论者所指出的,可能有更好的方法来处理您描述的用例。带有是/否选项的单选按钮是一种解决方案,但从用户的角度来看可能不太可用。我认为处理它的最好方法是重新考虑如何处理表单,并尽可能使用Django Forms库,而不是对原始POST数据进行低级处理。