Django:使用 <select multiple> 和 POST
Posted
技术标签:
【中文标题】Django:使用 <select multiple> 和 POST【英文标题】:Django: using <select multiple> and POST 【发布时间】:2010-10-11 17:44:09 【问题描述】:我在我的模板中使用了类似的东西
<select multiple="multiple" name="services" id="services" size="5">
% for service in services %
<option value="service.id">service</option>
% endfor %
</select>
当我在 Firebug 或 Django 调试中查看 POST 数据时,我看到它只发送一个值。我做错了什么或误解了一个概念?
【问题讨论】:
提供给模板的服务的价值是什么? 你的意思是:services = Service.objects.all() return render_to_response('add.html', 'services': services) ?? (我根本无法格式化这些 cmets。) @neoice:提示:不要在 cmets 中为您的问题添加详细信息。编辑您的问题以添加事实。问题的格式总是正确的。并且这个问题应该独立存在,没有 cmets 的线索。 你是如何在 jquery 中获取值并将其传递给 django 视图的?? 【参考方案1】:仅供参考,我必须使用:
list = request.POST.getlist("items[]")
因为省略 [] 会导致返回空白列表而不是正确的值。我正在使用 jQuery 来获取多选元素的值,而 jQuery 似乎正在添加 []
【讨论】:
我必须使用 [] 中间没有任何空格 是的,我最初有括号,它们之间没有空格,然后有人来编辑我的回复以包含一个空格,这当然会破坏代码,因为匹配文字“[]”不是与“[]”相同【参考方案2】:request.POST.getlist('服务')
为我工作。或者您可以将选择框名称定义为列表
【讨论】:
【参考方案3】:您只需使用...即可获得预期的列表
request.POST.getlist('fiel_name')
【讨论】:
【参考方案4】:小心!如果键不存在,QueryDict 的 getlist 方法将返回一个空列表。它不会抛出异常。 http://bit.ly/MdgrUH
【讨论】:
【参考方案5】:request.POST.getlist('services')
【讨论】:
大奖!我想我 确实 需要将服务更改为 services[],但是 getlist r0xors 为此。我以为我已经搜索了 Django 文档,但显然我错了。 您不需要 []。这是仅限于 php 的约定。 值得一提的是,这也适用于 GET 数据。request.GET.getlist('services')
我还需要将服务更改为 Python 的 services[]。
你能把它扩大到应该在哪里吗?如果我在视图中替换它,那么在调试时我会得到列表但丢失了所有额外的字段。以上是关于Django:使用 <select multiple> 和 POST的主要内容,如果未能解决你的问题,请参考以下文章
使用带有自定义引导样式的 Django 模板放置 <select> 字段
Django 表单。使前端 <select> 需要 ChoiceField