BooleanField

Поле BooleanField в Django Forms предназначено для работы с булевыми значениями - True или False. В HTML-форме это поле обычно отображается как флажок (checkbox). При отправке формы, если флажок установлен, поле будет содержать значение True, в противном случае - False. Поле может принимать параметры валидации и настройки отображения, такие как required, initial и label.

Синтаксис

pythonfrom django import forms

field = forms.BooleanField(**kwargs)

Основные параметры конструктора BooleanField:

Пример . Использование в форме

Создадим форму регистрации, содержащую поле согласия с условиями использования:

pythonfrom 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) и флажок не отмечен, будет вызвана ошибка валидации. Рассмотрим пример:

pythonfrom 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)

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

python<ul class="errorlist">
  <li>accept_terms
    <ul class="errorlist">
      <li>Это поле обязательно.</li>
    </ul>
  </li>
</ul>

Использование с начальным значением

Параметр initial позволяет задать значение по умолчанию. Например, если нужно, чтобы флажок был предварительно установлен:

pythonfrom django import forms

class SettingsForm(forms.Form):
  notifications_enabled = forms.BooleanField(
    label="Включить уведомления",
    initial=True,
    required=False
  )

# Создание формы с начальными данными
form = SettingsForm()

# Рендеринг поля
print(form.as_p())

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

python<p>
  <label for="id_notifications_enabled">Включить уведомления:</label>
  <input type="checkbox" name="notifications_enabled" 
  checked id="id_notifications_enabled">
</p>

Обработка данных из формы

После успешной валидации данные можно получить из cleaned_data. Поле BooleanField всегда возвращает значение типа bool:

pythonfrom 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))

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

pythonTrue
<class 'bool'>

Использование с ModelForm

В ModelForm поле BooleanField автоматически создается для соответствующих полей модели типа models.BooleanField:

pythonfrom 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,
    который содержит валидированные данные формы