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

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,
    который содержит валидированные данные формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить