TimeField

Поле TimeField в формах Django предназначено для приема и валидации времени. Оно преобразует введенную строку в объект datetime.time и проверяет, что значение соответствует формату времени. В качестве аргументов поле принимает параметры, такие как required, initial, widget, input_formats и другие. По умолчанию поле использует виджет TimeInput для отображения в HTML.

Синтаксис

pythonfrom django import forms

class MyForm(forms.Form):
  time_field = forms.TimeField(**options)

Пример

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

pythonfrom django import forms

class EventForm(forms.Form):
  event_name = forms.CharField(max_length=100)
  start_time = forms.TimeField(
    label="Start time",
    help_text="Enter time in HH:MM format"
  )
  end_time = forms.TimeField(
    label="End time",
    required=False,
    help_text="Optional end time"
  )

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

python"Form created successfully"

Пример

Давайте обработаем отправленные данные формы в представлении:

pythonfrom django.shortcuts import render
from django.http import HttpResponse
from .forms import EventForm
from datetime import time

def create_event(request):
  if request.method == 'POST':
    form = EventForm(request.POST)
    if form.is_valid():
      start_time = form.cleaned_data['start_time']
      end_time = form.cleaned_data['end_time']
      event_name = form.cleaned_data['event_name']
      
      # Check if start_time is before end_time
      if end_time and start_time > end_time:
        form.add_error('end_time', 'End time must be after start time')
        return render(request, 'event_form.html', {'form': form})
      
      # Save event data
      return HttpResponse(f"Event '{event_name}' saved with start time {start_time}")
  else:
    form = EventForm()
  return render(request, 'event_form.html', {'form': form})

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

python"Event 'Meeting' saved with start time 14:30:00"

Пример

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

pythonfrom django import forms

class BookingForm(forms.Form):
  booking_time = forms.TimeField(
    label="Booking time",
    input_formats=['%H:%M', '%I:%M %p'],
    help_text="Enter time in 24h (14:30) or 12h (02:30 PM) format"
  )

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

pythonform = BookingForm({'booking_time': '02:30 PM'})
form.is_valid()  # Returns True
form.cleaned_data['booking_time']  # datetime.time(14, 30)

Пример

Давайте используем поле TimeField в модели с помощью ModelForm:

pythonfrom django.db import models
from django import forms

class Schedule(models.Model):
  title = models.CharField(max_length=100)
  start_time = models.TimeField()
  end_time = models.TimeField(null=True, blank=True)

class ScheduleForm(forms.ModelForm):
  class Meta:
    model = Schedule
    fields = ['title', 'start_time', 'end_time']
    help_texts = {
      'start_time': 'Enter time in HH:MM format',
    }

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

pythonfrom myapp.forms import ScheduleForm

form_data = {
  'title': 'Daily standup',
  'start_time': '09:30',
  'end_time': '10:00'
}
form = ScheduleForm(form_data)
res = form.save()
print(f"Schedule '{res.title}' created with start time {res.start_time}")

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

python"Schedule 'Daily standup' created with start time 09:30:00"

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

  • класс Form,
    базовый класс для создания форм в Django
  • класс ModelForm,
    класс для создания форм на основе моделей
  • метод is_valid,
    метод для проверки валидности данных формы
  • атрибут cleaned_data,
    содержит валидированные данные формы