BooleanField
Поле BooleanField в Django Forms предназначено для работы с булевыми значениями - True или False. В HTML-форме это поле обычно отображается как флажок (checkbox). При отправке формы, если флажок установлен, поле будет содержать значение True, в противном случае - False. Поле может принимать параметры валидации и настройки отображения, такие как required, initial и label.
Синтаксис
from django import forms
field = forms.BooleanField(**kwargs)
Основные параметры конструктора BooleanField:
-
'required'- определяет, обязательное ли поле. По умолчаниюTrue. -
'initial'- начальное значение поля. По умолчаниюFalse. -
'label'- текстовая метка для поля. -
'widget'- виджет для отображения поля. По умолчанию используетсяCheckboxInput.
Пример . Использование в форме
Создадим форму регистрации, содержащую поле согласия с условиями использования:
from django import forms
class RegistrationForm(forms.Form):
username = forms.CharField(max_length=50)
email = forms.EmailField()
agree_to_terms = forms.BooleanField(
label="Согласен с условиями использования",
required=True
)
При рендеринге формы поле agree_to_terms отобразится как флажок. Если пользователь не установит его при отправке, форма не пройдет валидацию.
Валидация поля BooleanField
Поле автоматически преобразует полученные данные в булево значение. Если поле обязательное (required=True) и флажок не отмечен, будет вызвана ошибка валидации. Рассмотрим пример:
from django import forms
class TermsForm(forms.Form):
accept_terms = forms.BooleanField(
label="Я принимаю условия",
required=True
)
# Попытка отправки без отметки флажка
form_data = {'accept_terms': False}
form = TermsForm(data=form_data)
if form.is_valid():
print("Форма валидна")
else:
print(form.errors)
Результат выполнения кода:
<ul class="errorlist">
<li>accept_terms
<ul class="errorlist">
<li>Это поле обязательно.</li>
</ul>
</li>
</ul>
Использование с начальным значением
Параметр initial позволяет задать значение по умолчанию. Например, если нужно, чтобы флажок был предварительно установлен:
from django import forms
class SettingsForm(forms.Form):
notifications_enabled = forms.BooleanField(
label="Включить уведомления",
initial=True,
required=False
)
# Создание формы с начальными данными
form = SettingsForm()
# Рендеринг поля
print(form.as_p())
Результат выполнения кода:
<p>
<label for="id_notifications_enabled">Включить уведомления:</label>
<input type="checkbox" name="notifications_enabled"
checked id="id_notifications_enabled">
</p>
Обработка данных из формы
После успешной валидации данные можно получить из cleaned_data. Поле BooleanField всегда возвращает значение типа bool:
from django import forms
class SimpleForm(forms.Form):
is_active = forms.BooleanField(required=False)
# Данные от пользователя
form_data = {'is_active': True}
form = SimpleForm(data=form_data)
if form.is_valid():
res = form.cleaned_data['is_active']
print(res)
print(type(res))
Результат выполнения кода:
True
<class 'bool'>
Использование с ModelForm
В ModelForm поле BooleanField автоматически создается для соответствующих полей модели типа models.BooleanField:
from django.db import models
from django import forms
class UserProfile(models.Model):
user = models.CharField(max_length=50)
is_subscribed = models.BooleanField(default=False)
notify_by_email = models.BooleanField(default=True)
class ProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['user', 'is_subscribed', 'notify_by_email']
# Использование формы
profile = UserProfile(user='john_doe', is_subscribed=False)
form = ProfileForm(instance=profile)
print(form.as_p())
Смотрите также
-
класс
Form,
базовый класс для всех форм в Django -
класс
ModelForm,
класс для создания форм на основе моделей -
метод
is_valid,
который запускает валидацию формы -
атрибут
cleaned_data,
который содержит валидированные данные формы