РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
445 of 818 menu

Виджет 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,
    который разделяет ввод даты и времени на два отдельных поля
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить