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

Виджет Select

Виджет Select применяется в формах Django для отображения выпадающего списка. Он используется совместно с полями выбора, такими как ChoiceField, ModelChoiceField и другими. Виджет автоматически генерирует HTML-элемент <select> с вложенными элементами <option>, позволяя пользователю выбрать один вариант из предложенных. Виджет принимает аргументы choices, attrs для дополнительных HTML-атрибутов и allow_multiple_selected для поддержки множественного выбора.

Синтаксис

from django import forms class MyForm(forms.Form): my_field = forms.ChoiceField( choices=[('value1', 'Label 1'), ('value2', 'Label 2')], widget=forms.Select(attrs={'class': 'my-select'}) )

Пример

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

from django import forms class UserStatusForm(forms.Form): STATUS_CHOICES = [ ('active', 'Active'), ('inactive', 'Inactive'), ('pending', 'Pending'), ] status = forms.ChoiceField( choices=STATUS_CHOICES, widget=forms.Select(attrs={'class': 'form-control'}) )

Результат рендеринга виджета в HTML:

<select name="status" class="form-control" id="id_status"> <option value="active">Active</option> <option value="inactive">Inactive</option> <option value="pending">Pending</option> </select>

Пример

Использование виджета Select с моделью через ModelChoiceField:

from django import forms from myapp.models import Category class ProductForm(forms.Form): category = forms.ModelChoiceField( queryset=Category.objects.all(), widget=forms.Select(attrs={'class': 'category-select'}) )

При рендеринге виджет автоматически создаст опции на основе всех объектов Category:

<select name="category" class="category-select" id="id_category"> <option value="1">Electronics</option> <option value="2">Books</option> <option value="3">Clothing</option> </select>

Пример

Настройка отображаемого текста опций с помощью метода label_from_instance:

from django import forms from myapp.models import Product class ProductSelectForm(forms.Form): product = forms.ModelChoiceField( queryset=Product.objects.all(), widget=forms.Select, label_from_instance=lambda obj: f"{obj.name} - ${obj.price}" )

Результат рендеринга с кастомизированными метками:

<select name="product" id="id_product"> <option value="1">Laptop - $999</option> <option value="2">Phone - $599</option> <option value="3">Tablet - $399</option> </select>

Пример

Добавление пустой опции (placeholder) в выпадающий список:

from django import forms class SearchForm(forms.Form): STATUS_CHOICES = [ ('published', 'Published'), ('draft', 'Draft'), ('archived', 'Archived'), ] status = forms.ChoiceField( choices=STATUS_CHOICES, widget=forms.Select, required=False )

При установке required=False и рендеринге виджета появляется пустая опция:

<select name="status" id="id_status"> <option value="">---------</option> <option value="published">Published</option> <option value="draft">Draft</option> <option value="archived">Archived</option> </select>

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

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