Виджет DateTimeInput
Виджет DateTimeInput предназначен для отображения поля ввода даты и времени в HTML-формах. Он применяется к полям форм типа DateTimeField или SplitDateTimeField и позволяет пользователю вводить дату и время в текстовом формате. Виджет поддерживает настройку формата ввода и вывода, а также позволяет использовать HTML-атрибуты для кастомизации внешнего вида.
Синтаксис
from 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 принимает следующие параметры:
-
format- строка формата даты и времени, которая определяет, как значение будет отображаться и парситься. -
attrs- словарь с HTML-атрибутами, которые будут добавлены к тегу ввода.
Пример . Базовое использование
Создадим форму с полем для ввода даты и времени с использованием виджета по умолчанию:
from 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})
Пример . С кастомным форматом
Изменим формат отображения даты и времени на европейский стиль:
from 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())
Результат выполнения кода:
"<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 в форме, созданной на основе модели:
from 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())
Результат выполнения кода:
"2026-09-10 18:00"
Пример . С обработкой данных формы
Обработаем отправленные данные с полем даты и времени:
from 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))
Результат выполнения кода:
"Appointment set for: 2026-09-07 14:30:00"
"<class 'datetime.datetime'>"
Смотрите также
-
виджет
DateInput,
который используется для ввода только даты -
виджет
TimeInput,
который используется для ввода только времени -
поле
DateTimeField,
которое используется для хранения даты и времени в форме -
виджет
SplitDateTimeWidget,
который разделяет ввод даты и времени на два отдельных поля