По умолчанию, поле формы forms.DateField использует виджет forms.TextInput. Для добавления обычного способа выбора/ввода даты нам нужно создать собственный виджет. Наследуемся от forms.DateInput.
class DateInputWidget(forms.DateInput):
input_type = 'date'
def format_value(self, value):
return value
Свойство input_type = 'date'
задаёт атрибут type
для html-тега input. Если у нас есть какое-то начальное значение для поля, метод format_value
по умолчанию устанавливает в качестве значения для input
локализованную дату (если в settings.py
USE_L10N
установлен в True
). Что-то типа ДД.ММ.ГГГГ
. Браузер же требует формат ГГГГ-ММ-ДД
и потому не будет отображать начальное значение.
Чтобы этого избежать, переопределяем метод format_value
, заставляя его отправлять в форму дату в правильном формате, независимо от локализации.