По умолчанию, поле формы 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, заставляя его отправлять в форму дату в правильном формате, независимо от локализации.