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

Атрибут is_bound

Атрибут is_bound класса Form является булевым свойством, которое указывает на то, была ли форма связана с какими-либо данными (переданными в конструктор через параметры data или files). Если форма создана с переданными данными, атрибут возвращает True, в противном случае - False. Это свойство полезно для определения состояния формы и принятия решений в представлениях и шаблонах.

Синтаксис

form.is_bound

Пример

Давайте создадим форму без данных и проверим значение атрибута is_bound:

from django import forms class CommentForm(forms.Form): author = forms.CharField(max_length=100) text = forms.CharField(widget=forms.Textarea) # Empty form form = CommentForm() print(form.is_bound)

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

"False"

Пример

Теперь создадим форму с переданными данными и проверим атрибут:

from django import forms class CommentForm(forms.Form): author = forms.CharField(max_length=100) text = forms.CharField(widget=forms.Textarea) # Bound form data = { "author": "john_doe", "text": "This is a great article!" } form = CommentForm(data) print(form.is_bound)

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

"True"

Пример

Использование is_bound в представлении для проверки состояния формы:

from django.shortcuts import render from django.http import HttpResponseRedirect from .forms import CommentForm def comment_create(request): if request.method == "POST": form = CommentForm(request.POST) if form.is_bound: if form.is_valid(): # Process valid form data return HttpResponseRedirect("/success/") else: form = CommentForm() return render(request, "comment.html", {"form": form})

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

"Unbound form instance"

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

"Bound form instance"

Пример

Использование is_bound в шаблоне для условного отображения:

<form method="post"> {% csrf_token %} {{ form.as_p }} {% if form.is_bound %} <p class="alert">Форма была отправлена</p> {% else %} <p class="info">Заполните форму</p> {% endif %} <button type="submit">Отправить</button> </form>

Результат выполнения кода при первой загрузке страницы:

<div class="info">Заполните форму</div>

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

<div class="alert">Форма была отправлена</div>

Пример

Практическое использование is_bound для управления логикой валидации:

from django import forms class LoginForm(forms.Form): username = forms.CharField(max_length=150) password = forms.CharField(widget=forms.PasswordInput) def clean(self): cleaned_data = super().clean() if self.is_bound: # Additional validation only for bound forms username = cleaned_data.get("username") password = cleaned_data.get("password") if username and password: if len(password) < 8: raise forms.ValidationError( "Password must be at least 8 characters long" ) return cleaned_data # Bound form with validation data = { "username": "admin", "password": "short" } form = LoginForm(data) print(form.is_bound) print(form.is_valid()) print(form.errors)

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

"True" "False" "{'__all__': ['Password must be at least 8 characters long']}"

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

  • метод is_valid,
    который проверяет валидность данных связанной формы
  • атрибут cleaned_data,
    который содержит очищенные данные формы
  • атрибут errors,
    который содержит словарь ошибок валидации
  • атрибут initial,
    который определяет начальные значения полей формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить