Поле ComboField
Поле ComboField в Django является подклассом Field и предназначено для создания составных полей формы, которые применяют несколько валидаторов и преобразований последовательно. Основное предназначение - комбинировать разные проверки для одного поля, например, проверка на максимальную длину и соответствие регулярному выражению одновременно. Поле принимает два основных аргумента: fields - список экземпляров полей, чьи валидаторы будут применены, и default_validators - дополнительные валидаторы. Данные проходят через каждый компонент поля последовательно, и если какой-либо из этапов не проходит, валидация считается неудачной.
Синтаксис
from django import forms
class MyForm(forms.Form):
field_name = forms.ComboField(
fields=[field_class1, field_class2, ...],
**kwargs
)
Пример
Давайте создадим поле для ввода кода продукта, который должен быть строкой из 5 символов и содержать только цифры и буквы:
from django import forms
class ProductForm(forms.Form):
product_code = forms.ComboField(
fields=[
forms.CharField(max_length=5),
forms.RegexField(regex=r'^[A-Z0-9]+$')
],
label="Product Code",
help_text="Must be 5 characters of letters and numbers"
)
Пример
Рассмотрим форму для ввода имени пользователя, которое должно быть длиной не более 20 символов и содержать только буквы латиницы:
from django import forms
class UserForm(forms.Form):
username = forms.ComboField(
fields=[
forms.CharField(max_length=20),
forms.RegexField(regex=r'^[a-zA-Z]+$')
],
required=True,
label="Username",
initial="guest"
)
Результат выполнения кода при отправке формы с корректным значением:
# При валидных данных
form = UserForm({"username": "JohnDoe"})
if form.is_valid():
print("Valid username:", form.cleaned_data["username"])
else:
print("Errors:", form.errors)
"Valid username: JohnDoe"
Если данные не проходят проверку, например, ввод содержит цифры:
form = UserForm({"username": "John123"})
if form.is_valid():
print("Valid")
else:
print("Errors:", form.errors)
"Errors: {'username': ['Enter a valid value.']}"
Пример
Используем поле ComboField для проверки электронной почты, которая должна быть не длиннее 50 символов и соответствовать формату email:
from django import forms
from django.core.validators import EmailValidator
class ContactForm(forms.Form):
email = forms.ComboField(
fields=[
forms.CharField(max_length=50),
forms.EmailField()
],
label="Email Address",
required=True
)
Теперь создадим экземпляр формы и проверим её работу:
form = ContactForm({"email": "test@example.com"})
if form.is_valid():
print("Email is valid:", form.cleaned_data["email"])
else:
print("Errors:", form.errors)
"Email is valid: test@example.com"
Смотрите также
-
поле
CharField,
которое используется для ввода строковых данных -
поле
RegexField,
которое проверяет соответствие регулярному выражению -
поле
MultiValueField,
которое объединяет несколько полей в одно составное значение -
класс
Form,
который является базовым классом для всех форм