CheckboxInput
Виджет CheckboxInput применяется для отображения поля формы в виде чекбокса. В отличие от BooleanField, который использует этот виджет по умолчанию, CheckboxInput можно использовать самостоятельно для более тонкой настройки внешнего вида чекбокса. Основные параметры виджета: attrs - словарь с HTML-атрибутами, и check_test - вызываемый объект, определяющий, должен ли чекбокс быть отмечен. Виджет рендерится в HTML-код с типом checkbox и может принимать значения из словаря choices.
Синтаксис
from django import forms
# Базовое использование
checkbox = forms.CheckboxInput(attrs=None, check_test=None)
Пример
Создадим форму с полем, использующим виджет CheckboxInput вместо стандартного BooleanField:
from django import forms
class UserSettingsForm(forms.Form):
notify_by_email = forms.BooleanField(
required=False,
widget=forms.CheckboxInput(attrs={'class': 'form-checkbox'})
)
accept_terms = forms.BooleanField(
required=True,
widget=forms.CheckboxInput(attrs={'id': 'terms-checkbox'})
)
Результат рендеринга формы в шаблоне:
<input type="checkbox" name="notify_by_email" class="form-checkbox">
<input type="checkbox" name="accept_terms" id="terms-checkbox">
Пример
Использование параметра check_test для динамического определения отмеченного состояния чекбокса:
from django import forms
def is_premium(user):
return user.is_authenticated and user.has_perm('premium_access')
class SubscriptionForm(forms.Form):
premium_mode = forms.BooleanField(
required=False,
widget=forms.CheckboxInput(
attrs={'data-premium': 'true'},
check_test=is_premium
)
)
При рендеринге виджет вызовет функцию is_premium для определения, должен ли чекбокс быть отмечен:
# Если check_test вернет True, чекбокс будет отмечен
# <input type="checkbox" name="premium_mode" data-premium="true" checked>
# Если check_test вернет False:
# <input type="checkbox" name="premium_mode" data-premium="true">
Пример
Создание кастомного чекбокса с дополнительными атрибутами и обработкой значения:
from django import forms
class NotificationForm(forms.Form):
# Чекбокс с CSS-классом и обработчиком событий
send_notifications = forms.BooleanField(
initial=True,
widget=forms.CheckboxInput(
attrs={
'class': 'toggle-switch',
'onchange': 'handleToggle(event)',
'data-toggle': 'notifications'
}
)
)
# Чекбокс с явным значением для отправки
confirm_action = forms.BooleanField(
required=True,
widget=forms.CheckboxInput(
attrs={'value': 'confirmed'}
)
)
Результат рендеринга формы в HTML:
<input type="checkbox" name="send_notifications" class="toggle-switch" onchange="handleToggle(event)" data-toggle="notifications" checked>
<input type="checkbox" name="confirm_action" value="confirmed">
Смотрите также
-
виджет
CheckboxSelectMultiple,
который отображает несколько чекбоксов для выбора нескольких значений -
виджет
RadioSelect,
который отображает радиокнопки для выбора одного варианта из списка -
виджет
NullBooleanSelect,
который отображает выпадающий список для трех состояний: True, False и None -
виджет
HiddenInput,
который создает скрытое поле для передачи данных без отображения