Виджет DateInput
Виджет DateInput применяется к полю формы типа DateField и предназначен для отображения поля ввода даты в HTML. Виджет позволяет настроить формат отображения даты с помощью атрибута format, а также добавить HTML-атрибуты через аргумент attrs. По умолчанию виджет использует формат '%Y-%m-%d', который соответствует стандарту HTML5 для полей с типом 'date'.
Виджет принимает два основных параметра: attrs - словарь для передачи дополнительных HTML-атрибутов (например, 'class', 'placeholder'), и format - строка формата даты, используемая для отображения и парсинга значения.
Синтаксис
from django import forms
class MyForm(forms.Form):
date_field = forms.DateField(
widget=forms.DateInput(attrs={...}, format='...')
)
Пример
Создадим форму с полем для ввода даты и отобразим её в шаблоне:
from 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:
<input type="text" name="event_date"
class="form-control" placeholder="YYYY-MM-DD"
required id="id_event_date">
Пример
Настроим виджет для отображения даты в европейском формате 'dd/mm/yyyy':
from django import forms
class OrderForm(forms.Form):
order_date = forms.DateField(
widget=forms.DateInput(
format='%d/%m/%Y',
attrs={'class': 'datepicker'}
)
)
При передаче начального значения дата будет отображаться в указанном формате:
from datetime import date
form = OrderForm(initial={'order_date': date(2025, 5, 15)})
print(form.as_p())
Результат выполнения кода:
'<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>'
Пример
Валидация данных, полученных от виджета, выполняется автоматически с учётом указанного формата:
from 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)
Результат выполнения кода:
"Valid date: 2025-12-25"
Смотрите также
-
виджет
DateTimeInput,
который отображает поле для ввода даты и времени -
виджет
TextInput,
который отображает стандартное текстовое поле ввода -
поле формы
DateField,
которое используется для обработки данных даты -
виджет
SelectDateWidget,
который отображает дату через три отдельных выпадающих списка