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

Метод visible_fields

Метод visible_fields применяется к экземпляру формы и возвращает итератор, который перебирает все поля формы, кроме скрытых полей (полей с виджетом HiddenInput). Этот метод удобно использовать при ручной генерации HTML-разметки формы, когда нужно отобразить только видимые поля, оставляя скрытые поля для отображения отдельно с помощью метода hidden_fields. Метод не принимает никаких аргументов и возвращает объект генератора, который можно обойти в цикле.

Синтаксис

form.visible_fields()

Пример

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

from django import forms class UserForm(forms.Form): username = forms.CharField(max_length=100) email = forms.EmailField() user_id = forms.IntegerField(widget=forms.HiddenInput) form = UserForm() visible = form.visible_fields() for field in visible: print(field.name)

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

"username" "email"

Пример

Рассмотрим пример ручного рендеринга полей формы с использованием visible_fields:

from django import forms class OrderForm(forms.Form): product_name = forms.CharField(label="Product", max_length=200) quantity = forms.IntegerField(label="Quantity", min_value=1) discount_code = forms.CharField(required=False, widget=forms.HiddenInput) form = OrderForm() res = "" for field in form.visible_fields(): res += f"<div class='field'>" res += f" <label>{field.label}</label>" res += f" {field}" res += f"</div>" print(res)

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

"<div class='field'> <label>Product</label> <input type='text' name='product_name' maxlength='200' required id='id_product_name'></div><div class='field'> <label>Quantity</label> <input type='number' name='quantity' min='1' required id='id_quantity'></div>"

Пример

Продемонстрируем, как visible_fields позволяет обрабатывать поля с ошибками валидации:

from django import forms class ContactForm(forms.Form): name = forms.CharField(max_length=50) phone = forms.CharField() message = forms.CharField(widget=forms.Textarea) secret_token = forms.CharField(widget=forms.HiddenInput) form = ContactForm({"name": "", "phone": "123", "message": "Hello"}) form.is_valid() for field in form.visible_fields(): if field.errors: print(f"Field {field.name} has errors: {field.errors}") else: print(f"Field {field.name} is valid")

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

"Field name has errors: ['This field is required.']" "Field phone has errors: ['Enter a valid value.']" "Field message is valid"

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

  • метод hidden_fields,
    который возвращает только скрытые поля формы
  • метод as_div,
    который выводит форму в виде div-элементов
  • метод as_p,
    который выводит поля формы в виде параграфов
  • метод fields,
    который содержит все поля формы в виде словаря
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить