SplitHiddenDateTimeWidget
Виджет SplitHiddenDateTimeWidget предназначен для работы с полями типа SplitDateTimeField в формах Django. Он отображает дату и время как два отдельных скрытых поля ввода с идентификаторами _date и _time. Данный виджет полезен в ситуациях, когда необходимо передавать значение даты и времени в скрытом виде, например, для автоматического заполнения или для использования в JavaScript-логике без отображения на странице. Виджет наследуется от базового класса MultiWidget и использует подвиджеты HiddenInput для каждого компонента.
Синтаксис
from 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, и отобразим её в шаблоне:
from 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"
)
Результат рендеринга формы в шаблоне:
<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:
from 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"}
)
)
Результат рендеринга с добавленными атрибутами:
<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, а также индивидуальные классы для раздельной обработки.
Пример . С обработкой данных
Рассмотрим, как работает валидация и обработка данных, переданных через скрытые поля:
from 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)
Результат выполнения кода:
"2026-06-15 18:45:30"
Данные из двух скрытых полей корректно объединяются в объект datetime.
Смотрите также
-
виджет
SplitDateTimeWidget,
который отображает дату и время как видимые поля ввода -
виджет
HiddenInput,
который представляет собой скрытое поле ввода -
виджет
MultiWidget,
являющийся базовым классом для составных виджетов -
поле
SplitDateTimeField,
которое используется для валидации разделённых даты и времени