TimeField
Поле TimeField в формах Django предназначено для приема и валидации времени. Оно преобразует введенную строку в объект datetime.time и проверяет, что значение соответствует формату времени. В качестве аргументов поле принимает параметры, такие как required, initial, widget, input_formats и другие. По умолчанию поле использует виджет TimeInput для отображения в HTML.
Синтаксис
from django import forms
class MyForm(forms.Form):
time_field = forms.TimeField(**options)
Пример
Давайте создадим простую форму с полем для ввода времени:
from 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"
)
Результат выполнения кода:
"Form created successfully"
Пример
Давайте обработаем отправленные данные формы в представлении:
from 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})
Результат выполнения кода при валидных данных:
"Event 'Meeting' saved with start time 14:30:00"
Пример
Давайте укажем формат ввода времени с помощью параметра input_formats:
from 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"
)
Результат выполнения кода при обработке формы:
form = BookingForm({'booking_time': '02:30 PM'})
form.is_valid() # Returns True
form.cleaned_data['booking_time'] # datetime.time(14, 30)
Пример
Давайте используем поле TimeField в модели с помощью ModelForm:
from 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',
}
Результат выполнения кода для создания расписания:
from 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}")
Результат выполнения кода:
"Schedule 'Daily standup' created with start time 09:30:00"
Смотрите также
-
класс
Form,
базовый класс для создания форм в Django -
класс
ModelForm,
класс для создания форм на основе моделей -
метод
is_valid,
метод для проверки валидности данных формы -
атрибут
cleaned_data,
содержит валидированные данные формы