Поле CharField

Поле CharField является одним из наиболее часто используемых полей в формах Django. Оно предназначено для приёма текстовых данных от пользователя. При создании экземпляра поля можно задать множество параметров, определяющих его поведение: максимальную и минимальную длину, обязательность заполнения, начальное значение, виджет отображения и другие. Поле автоматически выполняет валидацию введённых данных на основе переданных параметров.

Синтаксис

pythonfrom django import forms

class MyForm(forms.Form):
  my_field = forms.CharField(
    max_length=100,
    min_length=3,
    required=True,
    initial='Default value',
    widget=forms.TextInput(attrs={'class': 'form-control'})
  )

Основные параметры

Параметр max_length задаёт максимально допустимую длину строки, а min_length - минимальную. Если введённое значение не соответствует этим ограничениям, форма не пройдёт валидацию. Параметр required определяет, является ли поле обязательным для заполнения. С помощью initial можно задать начальное значение, которое будет отображаться в поле при загрузке формы.

Пример . С валидацией длины

Создадим форму для ввода имени пользователя с ограничением длины от 3 до 20 символов:

pythonfrom django import forms

class UserForm(forms.Form):
  username = forms.CharField(
    min_length=3,
    max_length=20,
    required=True,
    label='Username',
    help_text='Enter a username between 3 and 20 characters.'
  )
  
# Создаём экземпляр формы с переданными данными
form = UserForm({'username': 'john_doe'})
if form.is_valid():
  print("Form is valid")
  print(form.cleaned_data['username'])

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

python"Form is valid"
"john_doe"

Пример . С использованием виджета

Параметр widget позволяет указать, какой HTML-элемент будет использоваться для отображения поля. По умолчанию используется TextInput. Можно использовать Textarea для многострочного ввода:

pythonfrom django import forms

class ArticleForm(forms.Form):
  title = forms.CharField(max_length=200)
  content = forms.CharField(
    widget=forms.Textarea(attrs={'rows': 10, 'cols': 80}),
    label='Article content'
  )
  
# Пример работы с формой
form = ArticleForm({
  'title': 'My Article',
  'content': 'This is the content of the article.'
})
if form.is_valid():
  print("Article saved successfully")
  print(form.cleaned_data['title'])

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

python"Article saved successfully"
"My Article"

Пример . С начальным значением

Используем параметр initial для предзаполнения поля при отображении формы:

pythonfrom django import forms

class ProfileForm(forms.Form):
  bio = forms.CharField(
    initial='Tell something about yourself',
    label='Biography',
    widget=forms.Textarea
  )
  
# Создаём пустую форму
form = ProfileForm()
print(form['bio'].value())

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

python"Tell something about yourself"

Пример . С кастомными сообщениями об ошибках

Параметр error_messages позволяет переопределить стандартные сообщения валидации:

pythonfrom django import forms

class UserRegistrationForm(forms.Form):
  username = forms.CharField(
    min_length=3,
    max_length=20,
    required=True,
    error_messages={
      'required': 'Username is required.',
      'min_length': 'Username must be at least 3 characters.',
      'max_length': 'Username cannot exceed 20 characters.'
    }
  )
  
form = UserRegistrationForm({'username': 'ab'})
if not form.is_valid():
  print(form.errors['username'][0])

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

python"Username must be at least 3 characters."

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

  • поле IntegerField,
    которое используется для ввода целых чисел
  • поле EmailField,
    которое валидирует ввод как email-адрес
  • виджет Textarea,
    который отображает поле как многострочный текст
  • валидатор MaxLengthValidator,
    который проверяет максимальную длину строки