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

Поле ChoiceField

Поле ChoiceField применяется в формах Django для создания поля выбора из предопределенного списка вариантов. Оно отображается в HTML как выпадающий список (select) и позволяет пользователю выбрать одно значение из нескольких. Поле принимает аргументы choices (список кортежей), required (обязательность), initial (начальное значение), widget (виджет для отображения) и другие стандартные параметры полей формы.

Синтаксис

from django import forms class MyForm(forms.Form): field_name = forms.ChoiceField( choices=CHOICES_LIST, required=True, initial='value1', widget=forms.Select, label='Label text' )

Пример . С простыми вариантами

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

from django import forms STATUS_CHOICES = [ ('active', 'Active'), ('inactive', 'Inactive'), ('pending', 'Pending'), ] class UserStatusForm(forms.Form): status = forms.ChoiceField( choices=STATUS_CHOICES, label='User status', initial='pending' )

Пример . С использованием виджета RadioSelect

Для отображения вариантов в виде радиокнопок используем виджет RadioSelect:

from django import forms LEVEL_CHOICES = [ ('1', 'Junior'), ('2', 'Middle'), ('3', 'Senior'), ] class DeveloperForm(forms.Form): level = forms.ChoiceField( choices=LEVEL_CHOICES, widget=forms.RadioSelect, label='Developer level' )

Пример . С динамическими вариантами

Варианты выбора могут формироваться динамически в методе __init__:

from django import forms from myapp.models import Category class ArticleForm(forms.Form): category = forms.ChoiceField( choices=[], label='Category' ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) categories = Category.objects.all() choices = [(str(cat.id), cat.name) for cat in categories] self.fields['category'].choices = choices

Пример . С обработкой данных формы

Получим выбранное значение после валидации формы:

from django import forms COLOR_CHOICES = [ ('red', 'Red'), ('blue', 'Blue'), ('green', 'Green'), ] class ColorForm(forms.Form): color = forms.ChoiceField(choices=COLOR_CHOICES) def process_form(request): form = ColorForm(request.POST) if form.is_valid(): selected_color = form.cleaned_data['color'] print(f"Selected color: {selected_color}") return "Color saved" return "Invalid form"

Пример . С выбором из модели

Для работы с моделями удобнее использовать ModelChoiceField, но можно и ChoiceField:

from django import forms from myapp.models import Product class ProductForm(forms.Form): product = forms.ChoiceField( choices=[], label='Product' ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) products = Product.objects.all() choices = [(prod.id, prod.name) for prod in products] self.fields['product'].choices = choices

Пример . С пустым значением

Добавим пустой вариант для необязательного поля:

from django import forms ROLE_CHOICES = [ ('', 'Select role'), ('admin', 'Administrator'), ('editor', 'Editor'), ('viewer', 'Viewer'), ] class RoleForm(forms.Form): role = forms.ChoiceField( choices=ROLE_CHOICES, required=False, label='User role' )

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

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