Виджет DateTimeInput

Виджет DateTimeInput предназначен для отображения поля ввода даты и времени в HTML-формах. Он применяется к полям форм типа DateTimeField или SplitDateTimeField и позволяет пользователю вводить дату и время в текстовом формате. Виджет поддерживает настройку формата ввода и вывода, а также позволяет использовать HTML-атрибуты для кастомизации внешнего вида.

Синтаксис

pythonfrom django import forms

class MyForm(forms.Form):
  my_datetime = forms.DateTimeField(
    widget=forms.DateTimeInput(
      attrs={'class': 'my-class', 'placeholder': 'YYYY-MM-DD HH:MM:SS'},
      format='%Y-%m-%d %H:%M:%S'
    )
  )

Параметры виджета

Виджет DateTimeInput принимает следующие параметры:

Пример . Базовое использование

Создадим форму с полем для ввода даты и времени с использованием виджета по умолчанию:

pythonfrom django import forms
from django.shortcuts import render

class EventForm(forms.Form):
  event_datetime = forms.DateTimeField(
    label='Дата и время события',
    widget=forms.DateTimeInput(attrs={'class': 'form-control'})
  )

def create_event(request):
  if request.method == 'POST':
    form = EventForm(request.POST)
    if form.is_valid():
      datetime_value = form.cleaned_data['event_datetime']
      print(f"Event date time: {datetime_value}")
  else:
    form = EventForm()
  return render(request, 'event_form.html', {'form': form})

Пример . С кастомным форматом

Изменим формат отображения даты и времени на европейский стиль:

pythonfrom django import forms
from datetime import datetime

class MeetingForm(forms.Form):
  meeting_time = forms.DateTimeField(
    label='Время встречи',
    widget=forms.DateTimeInput(
      format='%d.%m.%Y %H:%M',
      attrs={'placeholder': 'DD.MM.YYYY HH:MM'}
    )
  )

# Использование формы
form = MeetingForm(initial={'meeting_time': datetime(2026, 9, 7, 15, 30)})
print(form.as_p())

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

python"<p><label for="id_meeting_time">Время встречи:</label>
<input type="text" name="meeting_time" value="07.09.2026 15:30" placeholder="DD.MM.YYYY HH:MM" id="id_meeting_time"></p>"

Пример . С использованием в ModelForm

Рассмотрим использование виджета DateTimeInput в форме, созданной на основе модели:

pythonfrom django.db import models
from django import forms

class Task(models.Model):
  title = models.CharField(max_length=100)
  deadline = models.DateTimeField()
  description = models.TextField(blank=True)

class TaskForm(forms.ModelForm):
  class Meta:
    model = Task
    fields = ['title', 'deadline', 'description']
    widgets = {
      'deadline': forms.DateTimeInput(
        format='%Y-%m-%d %H:%M',
        attrs={'class': 'datetime-input', 'type': 'datetime-local'}
      )
    }

# Создание формы с начальными данными
task = Task(title='Finish project', deadline='2026-09-10 18:00')
form = TaskForm(instance=task)
print(form['deadline'].value())

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

python"2026-09-10 18:00"

Пример . С обработкой данных формы

Обработаем отправленные данные с полем даты и времени:

pythonfrom django import forms
from datetime import datetime

class AppointmentForm(forms.Form):
  appointment_date = forms.DateTimeField(
    widget=forms.DateTimeInput(
      format='%Y-%m-%d %H:%M',
      attrs={'type': 'datetime-local'}
    )
  )

# Имитация POST запроса
post_data = {
  'appointment_date': '2026-09-07 14:30'
}
form = AppointmentForm(post_data)
if form.is_valid():
  appointment = form.cleaned_data['appointment_date']
  print(f"Appointment set for: {appointment}")
  print(type(appointment))

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

python"Appointment set for: 2026-09-07 14:30:00"
"<class 'datetime.datetime'>"

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

  • виджет DateInput,
    который используется для ввода только даты
  • виджет TimeInput,
    который используется для ввода только времени
  • поле DateTimeField,
    которое используется для хранения даты и времени в форме
  • виджет SplitDateTimeWidget,
    который разделяет ввод даты и времени на два отдельных поля