Виджет DateInput

Виджет DateInput применяется к полю формы типа DateField и предназначен для отображения поля ввода даты в HTML. Виджет позволяет настроить формат отображения даты с помощью атрибута format, а также добавить HTML-атрибуты через аргумент attrs. По умолчанию виджет использует формат '%Y-%m-%d', который соответствует стандарту HTML5 для полей с типом 'date'.

Виджет принимает два основных параметра: attrs - словарь для передачи дополнительных HTML-атрибутов (например, 'class', 'placeholder'), и format - строка формата даты, используемая для отображения и парсинга значения.

Синтаксис

pythonfrom django import forms

class MyForm(forms.Form):
  date_field = forms.DateField(
    widget=forms.DateInput(attrs={...}, format='...')
  )

Пример

Создадим форму с полем для ввода даты и отобразим её в шаблоне:

pythonfrom django import forms

class EventForm(forms.Form):
  name = forms.CharField(max_length=100)
  event_date = forms.DateField(
    widget=forms.DateInput(attrs={
      'class': 'form-control',
      'placeholder': 'YYYY-MM-DD'
    })
  )

Результат рендеринга поля event_date:

python<input type="text" name="event_date"
  class="form-control" placeholder="YYYY-MM-DD"
  required id="id_event_date">

Пример

Настроим виджет для отображения даты в европейском формате 'dd/mm/yyyy':

pythonfrom django import forms

class OrderForm(forms.Form):
  order_date = forms.DateField(
    widget=forms.DateInput(
      format='%d/%m/%Y',
      attrs={'class': 'datepicker'}
    )
  )

При передаче начального значения дата будет отображаться в указанном формате:

pythonfrom datetime import date

form = OrderForm(initial={'order_date': date(2025, 5, 15)})
print(form.as_p())

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

python'<p><label for="id_order_date">Order date:</label>
<input type="text" name="order_date" value="15/05/2025"
class="datepicker" required id="id_order_date"></p>'

Пример

Валидация данных, полученных от виджета, выполняется автоматически с учётом указанного формата:

pythonfrom django import forms

class ReservationForm(forms.Form):
  check_in = forms.DateField(
    widget=forms.DateInput(format='%d.%m.%Y')
  )

form = ReservationForm(data={'check_in': '25.12.2025'})
if form.is_valid():
  print(f"Valid date: {form.cleaned_data['check_in']}")
else:
  print(form.errors)

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

python"Valid date: 2025-12-25"

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

  • виджет DateTimeInput,
    который отображает поле для ввода даты и времени
  • виджет TextInput,
    который отображает стандартное текстовое поле ввода
  • поле формы DateField,
    которое используется для обработки данных даты
  • виджет SelectDateWidget,
    который отображает дату через три отдельных выпадающих списка