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

Поле DateTimeField

Поле DateTimeField применяется в формах Django для обработки ввода даты и времени. Оно автоматически преобразует строковые значения из формы в объект datetime.datetime Python, а также выполняет валидацию введенных данных. Поле может принимать различные аргументы для настройки поведения, такие как обязательность, начальное значение, формат ввода и другие.

Синтаксис

from django import forms class MyForm(forms.Form): dt = forms.DateTimeField(label="Date and Time", required=True, initial=None)

Базовый пример использования

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

from django import forms class EventForm(forms.Form): name = forms.CharField(max_length=100) event_time = forms.DateTimeField(label="Event Time", required=True)

В шаблоне такая форма отобразится как поле ввода с текстовым полем, в которое пользователь может ввести дату и время в формате по умолчанию (например, "2026-09-07 14:30:00"):

<form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Submit</button> </form>

Работа с данными формы

После отправки формы поле DateTimeField преобразует введенную строку в объект datetime.datetime:

from django.shortcuts import render from .forms import EventForm from datetime import datetime def create_event(request): if request.method == 'POST': form = EventForm(request.POST) if form.is_valid(): event_time = form.cleaned_data['event_time'] print(f"Event time: {event_time}") print(f"Type: {type(event_time)}") else: form = EventForm() return render(request, 'event.html', {'form': form})

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

"Event time: 2026-09-07 14:30:00" "Type: <class 'datetime.datetime'>"

Валидация данных

Поле DateTimeField автоматически проверяет корректность введенной даты и времени. Если пользователь введет некорректную строку, форма вернет ошибку:

from django import forms class EventForm(forms.Form): name = forms.CharField(max_length=100) event_time = forms.DateTimeField(label="Event Time") # Попытка отправки с некорректными данными data = {'name': 'Conference', 'event_time': 'invalid date'} form = EventForm(data) if not form.is_valid(): print(form.errors)

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

{'event_time': ['Enter a valid date/time.']}

Использование с моделями

В форме на основе модели (ModelForm) поле DateTimeField автоматически создается для соответствующих полей модели:

from django.db import models from django import forms class Event(models.Model): name = models.CharField(max_length=100) created_at = models.DateTimeField(auto_now_add=True) start_time = models.DateTimeField() class EventForm(forms.ModelForm): class Meta: model = Event fields = ['name', 'start_time']

Теперь форма автоматически будет использовать поле DateTimeField для атрибута start_time модели:

from django.shortcuts import render, redirect from .forms import EventForm def create_event(request): if request.method == 'POST': form = EventForm(request.POST) if form.is_valid(): event = form.save() print(f"Event {event.name} created at {event.created_at}") return redirect('event_list') else: form = EventForm() return render(request, 'create_event.html', {'form': form})

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

"Event Conference created at 2026-09-07 14:30:00"

Настройка формата ввода

Можно указать формат ввода даты и времени с помощью параметра input_formats:

from django import forms class EventForm(forms.Form): name = forms.CharField(max_length=100) event_time = forms.DateTimeField( label="Event Time", input_formats=['%d/%m/%Y %H:%M', '%d-%m-%Y %H:%M', '%Y-%m-%d %H:%M'] )

Теперь пользователь может вводить дату в одном из указанных форматов:

data = {'name': 'Workshop', 'event_time': '07/09/2026 15:30'} form = EventForm(data) if form.is_valid(): print(form.cleaned_data['event_time'])

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

"2026-09-07 15:30:00"

Установка начального значения

Для установки начального значения поля используйте параметр initial. Это может быть объект datetime.datetime или строка в правильном формате:

from django import forms from datetime import datetime, timedelta class EventForm(forms.Form): name = forms.CharField(max_length=100) event_time = forms.DateTimeField( label="Event Time", initial=datetime.now() + timedelta(days=1), input_formats=['%Y-%m-%d %H:%M:%S'] ) form = EventForm() print(form['event_time'].value())

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

"2026-09-08 14:30:00"

Работа с часовыми поясами

DateTimeField поддерживает часовые пояса, если используется с USE_TZ = True. При этом поле возвращает объект datetime.datetime в формате с часовым поясом:

from django import forms from django.conf import settings settings.USE_TZ = True class EventForm(forms.Form): name = forms.CharField(max_length=100) event_time = forms.DateTimeField(label="Event Time") data = {'name': 'Meeting', 'event_time': '2026-09-07 14:30:00'} form = EventForm(data) if form.is_valid(): dt = form.cleaned_data['event_time'] print(f"Time: {dt}") print(f"Timezone: {dt.tzinfo}")

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

"Time: 2026-09-07 14:30:00+00:00" "Timezone: UTC"

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

  • класс Form,
    базовый класс для создания форм в Django
  • класс ModelForm,
    класс для создания форм на основе моделей
  • метод save,
    который сохраняет данные формы в базу данных
  • метод is_valid,
    который выполняет валидацию данных формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить