Атрибут initial

Атрибут initial применяется к классу Form и позволяет задать начальные значения для полей формы. Эти значения будут отображаться в полях ввода при первой загрузке страницы, до того как пользователь отправит данные. Атрибут представляет собой словарь, где ключами являются имена полей, а значениями - начальные данные. Это удобно для предзаполнения формы значениями по умолчанию или данными из базы данных.

Синтаксис

pythonclass MyForm(forms.Form):
  field_name = forms.FieldType()

  class Meta:
    initial = {
      'field_name': 'value',
    }

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

pythonform = MyForm(initial={'field_name': 'value'})

Пример

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

pythonfrom django import forms

class RegistrationForm(forms.Form):
  username = forms.CharField(max_length=100)
  email = forms.EmailField()
  age = forms.IntegerField()

  class Meta:
    initial = {
      'username': 'guest',
      'email': 'guest@example.com',
      'age': 18,
    }

Создадим экземпляр формы и выведем начальные значения:

pythonform = RegistrationForm()
print(form.initial)

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

python{'username': 'guest', 'email': 'guest@example.com', 'age': 18}

Пример

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

pythonfrom django import forms

class ProfileForm(forms.Form):
  first_name = forms.CharField(max_length=50)
  last_name = forms.CharField(max_length=50)
  birth_date = forms.DateField()

user_data = {
  'first_name': 'John',
  'last_name': 'Doe',
  'birth_date': '1990-05-15',
}
form = ProfileForm(initial=user_data)
print(form.initial)

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

python{'first_name': 'John', 'last_name': 'Doe', 'birth_date': '1990-05-15'}

Пример

Атрибут initial также можно использовать вместе с ModelForm для предзаполнения значениями из существующей записи базы данных:

pythonfrom django import forms
from myapp.models import User

class UserForm(forms.ModelForm):
  class Meta:
    model = User
    fields = ['username', 'email', 'age']

user = User.objects.get(id=1)
form = UserForm(initial={
  'username': user.username,
  'email': user.email,
  'age': user.age,
})
print(form.initial)

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

python{'username': 'john_doe', 'email': 'john@example.com', 'age': 30}

Пример

Давайте создадим форму с динамическими начальными значениями на основе текущей даты:

pythonfrom django import forms
from datetime import date

class OrderForm(forms.Form):
  product = forms.CharField(max_length=100)
  quantity = forms.IntegerField()
  order_date = forms.DateField()

today = date.today()
form = OrderForm(initial={
  'product': 'Laptop',
  'quantity': 1,
  'order_date': today,
})
print(form.initial['product'])
print(form.initial['order_date'])

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

python"Laptop"
"2026-09-07"

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

  • метод is_valid,
    который валидирует данные формы
  • атрибут cleaned_data,
    который содержит очищенные и проверенные данные формы
  • атрибут instance,
    который связывает форму с объектом модели
  • метод save,
    который сохраняет данные формы в базу данных