РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
426 of 818 menu

Поле MultipleChoiceField

Поле MultipleChoiceField применяется в формах Django для выбора нескольких вариантов из списка. В отличие от ChoiceField, которое позволяет выбрать только один вариант, это поле возвращает список выбранных значений. Поле может быть использовано с различными виджетами, такими как SelectMultiple для выпадающего списка с множественным выбором или CheckboxSelectMultiple для группы чекбоксов. В качестве аргументов принимает choices - список кортежей (значение, отображение), а также стандартные аргументы валидации, такие как required, label, initial и другие.

Синтаксис

from django import forms class MyForm(forms.Form): field_name = forms.MultipleChoiceField( choices=CHOICES_LIST, required=False, label="Label", initial=['value1', 'value2'], widget=forms.CheckboxSelectMultiple )

Пример . С выпадающим списком

Создадим форму для выбора нескольких любимых языков программирования:

from django import forms LANGUAGES = [ ('python', 'Python'), ('javascript', 'JavaScript'), ('java', 'Java'), ('golang', 'Go'), ('rust', 'Rust'), ] class ProgrammingForm(forms.Form): languages = forms.MultipleChoiceField( choices=LANGUAGES, label="Выберите языки программирования", widget=forms.SelectMultiple(attrs={'size': 5}) )

Обработка данных из такой формы в представлении:

from django.shortcuts import render from .forms import ProgrammingForm def languages_view(request): res = None if request.method == 'POST': form = ProgrammingForm(request.POST) if form.is_valid(): res = form.cleaned_data['languages'] print(res) else: form = ProgrammingForm() return render(request, 'languages.html', { 'form': form, 'result': res, })

Результат выполнения кода при выборе Python и JavaScript:

['python', 'javascript']

Пример . С чекбоксами

Используем виджет CheckboxSelectMultiple для отображения списка в виде группы чекбоксов:

from django import forms GENRES = [ ('fiction', 'Художественная литература'), ('science', 'Научная литература'), ('biography', 'Биография'), ('history', 'Историческая литература'), ('fantasy', 'Фэнтези'), ] class BookForm(forms.Form): genres = forms.MultipleChoiceField( choices=GENRES, label="Выберите жанры", widget=forms.CheckboxSelectMultiple, required=False )

Пример использования формы в шаблоне:

from django.shortcuts import render from .forms import BookForm def book_view(request): form = BookForm(request.POST or None) if request.method == 'POST' and form.is_valid(): selected_genres = form.cleaned_data['genres'] print(f"Selected genres: {selected_genres}") return render(request, 'book.html', {'form': form})

Результат выполнения кода при выборе нескольких жанров:

"Selected genres: ['fiction', 'fantasy']"

Пример . С валидацией

Поле MultipleChoiceField поддерживает валидацию с помощью аргументов max_length и min_length:

from django import forms from django.core.exceptions import ValidationError FRUITS = [ ('apple', 'Яблоко'), ('banana', 'Банан'), ('orange', 'Апельсин'), ('grape', 'Виноград'), ('strawberry', 'Клубника'), ] class FruitForm(forms.Form): fruits = forms.MultipleChoiceField( choices=FRUITS, label="Выберите фрукты", widget=forms.CheckboxSelectMultiple, min_length=2, max_length=3, error_messages={ 'min_length': 'Выберите как минимум 2 фрукта.', 'max_length': 'Можно выбрать не более 3 фруктов.', } )

Пример обработки формы с валидацией:

from django.shortcuts import render from .forms import FruitForm def fruit_view(request): form = FruitForm(request.POST or None) res = None if request.method == 'POST': if form.is_valid(): res = form.cleaned_data['fruits'] print(f"Valid fruits: {res}") else: print("Form errors:", form.errors) return render(request, 'fruit.html', { 'form': form, 'result': res, })

Результат выполнения кода при выборе 4 фруктов (ошибка):

"Form errors: {'fruits': ['Можно выбрать не более 3 фруктов.']}"

Смотрите также

  • поле ChoiceField,
    которое позволяет выбрать только один вариант из списка
  • поле TypedMultipleChoiceField,
    которое преобразует выбранные значения к определенному типу
  • виджет CheckboxSelectMultiple,
    который отображает поле как группу чекбоксов
  • виджет SelectMultiple,
    который отображает поле как выпадающий список с множественным выбором
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить