в Django ввод с множественным выбором просто возвращает одно значение?

#django #jinja2

#django #jinja2

Вопрос:

У меня есть очень простая форма с полем «выбрать». Для каждого пользователя в приложении создается поле параметров, которое отлично работает:

 <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», но не список? Как я могу извлечь все значения из этого множественного выбора?

Комментарии:

1. request.POST.getlist('users') .

Ответ №1:

Если вы указываете индекс 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] для проверки и очистки данных запроса.