SplitHiddenDateTimeWidget

Виджет SplitHiddenDateTimeWidget предназначен для работы с полями типа SplitDateTimeField в формах Django. Он отображает дату и время как два отдельных скрытых поля ввода с идентификаторами _date и _time. Данный виджет полезен в ситуациях, когда необходимо передавать значение даты и времени в скрытом виде, например, для автоматического заполнения или для использования в JavaScript-логике без отображения на странице. Виджет наследуется от базового класса MultiWidget и использует подвиджеты HiddenInput для каждого компонента.

Синтаксис

pythonfrom django import forms
from django.forms.widgets import SplitHiddenDateTimeWidget

class MyForm(forms.Form):
  datetime_field = forms.SplitDateTimeField(widget=SplitHiddenDateTimeWidget)

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

attrs - словарь с HTML-атрибутами для полей ввода. Применяется ко всем подвиджетам.

date_attrs - словарь с HTML-атрибутами для поля даты. Переопределяет attrs для поля даты.

time_attrs - словарь с HTML-атрибутами для поля времени. Переопределяет attrs для поля времени.

Пример . С формой

Создадим форму с полем даты и времени, использующим виджет SplitHiddenDateTimeWidget, и отобразим её в шаблоне:

pythonfrom django import forms
from django.forms.widgets import SplitHiddenDateTimeWidget

class EventForm(forms.Form):
  name = forms.CharField(max_length=100)
  event_datetime = forms.SplitDateTimeField(
    widget=SplitHiddenDateTimeWidget,
    initial="2026-01-01 12:30:00"
  )

Результат рендеринга формы в шаблоне:

python<input type="hidden" name="event_datetime_0" value="2026-01-01">
<input type="hidden" name="event_datetime_1" value="12:30:00">

Как видно, виджет создаёт два скрытых поля с суффиксами _0 для даты и _1 для времени.

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

Передадим дополнительные HTML-атрибуты для скрытых полей, чтобы использовать их в JavaScript:

pythonfrom django import forms
from django.forms.widgets import SplitHiddenDateTimeWidget

class EventForm(forms.Form):
  event_datetime = forms.SplitDateTimeField(
    widget=SplitHiddenDateTimeWidget(
      attrs={"data-type": "hidden-datetime"},
      date_attrs={"class": "hidden-date"},
      time_attrs={"class": "hidden-time"}
    )
  )

Результат рендеринга с добавленными атрибутами:

python<input type="hidden" name="event_datetime_0" value="None" data-type="hidden-datetime" class="hidden-date">
<input type="hidden" name="event_datetime_1" value="None" data-type="hidden-datetime" class="hidden-time">

В этом примере оба поля получили общий атрибут data-type, а также индивидуальные классы для раздельной обработки.

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

Рассмотрим, как работает валидация и обработка данных, переданных через скрытые поля:

pythonfrom django import forms
from django.forms.widgets import SplitHiddenDateTimeWidget
from datetime import datetime

class EventForm(forms.Form):
  event_datetime = forms.SplitDateTimeField(
    widget=SplitHiddenDateTimeWidget
  )

# Имитация отправки данных
post_data = {
  "event_datetime_0": "2026-06-15",
  "event_datetime_1": "18:45:30"
}

form = EventForm(post_data)
if form.is_valid():
  res = form.cleaned_data["event_datetime"]
  print(res)

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

python"2026-06-15 18:45:30"

Данные из двух скрытых полей корректно объединяются в объект datetime.

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

  • виджет SplitDateTimeWidget,
    который отображает дату и время как видимые поля ввода
  • виджет HiddenInput,
    который представляет собой скрытое поле ввода
  • виджет MultiWidget,
    являющийся базовым классом для составных виджетов
  • поле SplitDateTimeField,
    которое используется для валидации разделённых даты и времени