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

DurationField

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

Поле принимает значения в формате длительности, например, "3 days, 5 hours" или "P3DT5H". После валидации данные преобразуются в объект timedelta, который можно использовать для дальнейших вычислений и операций.

Синтаксис

from django import forms class MyForm(forms.Form): duration = forms.DurationField(**options)

Где **options - это набор дополнительных параметров, таких как required, label, initial, widget и другие.

Пример . Использование в форме

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

from django import forms class WorkTimeForm(forms.Form): work_duration = forms.DurationField( label="Work duration", required=True, help_text="Enter time in format: DD days, HH:MM:SS" )

Пример . Обработка данных

Рассмотрим пример обработки данных из формы с полем длительности:

from django import forms from datetime import timedelta class DurationForm(forms.Form): time_spent = forms.DurationField( label="Time spent", initial=timedelta(hours=2, minutes=30) ) def process_form(request): if request.method == 'POST': form = DurationForm(request.POST) if form.is_valid(): duration = form.cleaned_data['time_spent'] # duration is a timedelta object total_seconds = duration.total_seconds() hours = total_seconds / 3600 print(f"Total hours: {hours}") else: form = DurationForm() return render(request, 'form.html', {'form': form})

Результат выполнения кода при вводе "2:30:00":

"Total hours: 2.5"

Пример . С модельной формой

Рассмотрим использование DurationField в модельной форме для работы с моделью, содержащей поле длительности:

from django.db import models from django import forms class Task(models.Model): name = models.CharField(max_length=100) duration = models.DurationField( help_text="Task duration in days: hours:minutes" ) class TaskForm(forms.ModelForm): class Meta: model = Task fields = ['name', 'duration'] # Использование формы task = Task.objects.get(id=1) form = TaskForm(instance=task) # Отображение текущей длительности print(f"Current duration: {task.duration}")

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

"Current duration: 2 days, 3:30:00"

Валидация и очистка данных

Поле DurationField автоматически выполняет валидацию введённых данных. Можно также добавить собственную валидацию с помощью метода clean_duration:

from django import forms from datetime import timedelta class ProjectForm(forms.Form): time_estimate = forms.DurationField( label="Time estimate", required=True ) def clean_time_estimate(self): data = self.cleaned_data['time_estimate'] # Проверяем, что длительность не превышает 30 дней if data > timedelta(days=30): raise forms.ValidationError( "Time estimate cannot exceed 30 days" ) return data

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

  • поле TimeField,
    которое используется для работы с временем
  • поле DateTimeField,
    которое предназначено для работы с датой и временем
  • метод cleaned_data,
    который содержит очищенные данные формы
  • метод is_valid,
    который проверяет валидность данных формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить