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】:
request.POST.getlist('services')

【讨论】:

大奖!我想我 确实 需要将服务更改为 services[],但是 getlist r0xors 为此。我以为我已经搜索了 Django 文档,但显然我错了。 您不需要 []。这是一个仅限于 php 的约定。 值得一提的是,这也适用于 GET 数据。 request.GET.getlist('services') 我还需要将服务更改为 Python 的 services[]。 你能把它扩大到应该在哪里吗?如果我在视图中替换它,那么在调试时我会得到列表但丢失了所有额外的字段。【参考方案2】:

仅供参考,我必须使用:

    list = request.POST.getlist("items[]")

因为省略 [] 会导致返回空白列表而不是正确的值。我正在使用 jQuery 来获取多选元素的值,而 jQuery 似乎正在添加 []

【讨论】:

我必须使用 [] 之间没有任何空白 是的,我最初有括号,它们之间没有空格,然后有人来编辑我的回复以包含一个空格,这当然会破坏代码,因为匹配文字“[]”不是与“[]”相同【参考方案3】:

您只需使用...即可获得预期的列表

request.POST.getlist('fiel_name')

【讨论】:

【参考方案4】:

小心!如果键不存在,QueryDict 的 getlist 方法将返回一个空列表。它不会抛出异常。 http://bit.ly/MdgrUH

【讨论】:

【参考方案5】:

request.POST.getlist('服务')

为我工作。或者您可以将选择框名称定义为列表

【讨论】:

以上是关于Django:使用 <select multiple> 和 POST的主要内容,如果未能解决你的问题,请参考以下文章

使用带有自定义引导样式的 Django 模板放置 <select> 字段

Django 表单。使前端 <select> 需要 ChoiceField

chosen选择框加载数据

<select> 内循环的 Django 模板在选择后呈现值

django - 从 HTML <select> 收集数据

Django-selectable - 在焦点上显示自动完成选项