首页 > 解决方案 > 在 Django 中,多选输入只返回一个值?

问题描述

我有一个带有“选择”字段的非常简单的表单。对于应用程序中的每个用户,它都会创建一个选项字段,效果很好:

<select name="users" id="users" multiple>
        <option value="{{admin.id}}" selected>{{ admin.username }}</option>
        <!-- can I delete the admin from this list? -->
        {% for user in users %}
            <option value="{{user.id}}">{{ user.username }}</option>
        {% endfor %}
</select>

现在,当我尝试检索“用户”的值时,即使它们都被选中,我总是只得到一个值......:

 if request.method == "POST":
        title = request.POST["title"]
        admin = request.user
        project_users = request.POST["users"]

        print(project_users)

我只得到“1”或“2”而不是列表?如何从这个多重选择中检索所有值?

标签: djangojinja2

解决方案


如果您下标request.POST,您将获得与给定键匹配的最后一个值,即使有多个。

您可以使用.getlist(…)[Django-doc]来获取值列表。如果没有值与给定键匹配,则列表将为空:

if request.method == 'POST':
    title = request.POST['title']
    admin = request.user
    project_users = request.POST.getlist('users')

    print(project_users)

然而,使用表单[Django-doc]来验证和清理请求数据可能更方便。


推荐阅读