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

Поле DurationField

Поле DurationField в Django предназначено для хранения промежутков времени. Оно работает с объектами timedelta из стандартного модуля datetime. Это поле удобно использовать для хранения длительности событий, времени выполнения задач или любых других интервалов. В базе данных значение хранится в микросекундах или как интервал, в зависимости от используемой СУБД.

Синтаксис

from django.db import models class MyModel(models.Model): duration = models.DurationField( verbose_name="Длительность", null=True, blank=True, default=timedelta(0) )

Пример

Создадим модель Task с полем DurationField для хранения времени выполнения задачи:

from django.db import models from datetime import timedelta class Task(models.Model): name = models.CharField(max_length=100) estimated_time = models.DurationField(default=timedelta(hours=1)) actual_time = models.DurationField(null=True, blank=True) def __str__(self): return self.name

Пример

Создадим задачу с оценочным временем в 2 часа 30 минут:

from myapp.models import Task from datetime import timedelta task = Task.objects.create( name="Write documentation", estimated_time=timedelta(hours=2, minutes=30) ) print(task.estimated_time)

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

"2:30:00"

Пример

Обновим фактическое время выполнения задачи:

from myapp.models import Task from datetime import timedelta task = Task.objects.get(name="Write documentation") task.actual_time = timedelta(days=1, hours=3, minutes=15) task.save() res = Task.objects.values('name', 'actual_time') print(res)

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

[{'name': 'Write documentation', 'actual_time': datetime.timedelta(days=1, seconds=11700)}]

Пример

Отфильтруем задачи, у которых оценочное время превышает 2 часа:

from myapp.models import Task from datetime import timedelta long_tasks = Task.objects.filter(estimated_time__gt=timedelta(hours=2)) for task in long_tasks: print(task.name, task.estimated_time)

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

"Write documentation 2:30:00" "Design database 3:45:00"

Пример

Используем агрегацию для вычисления общего времени выполнения всех задач:

from myapp.models import Task from django.db.models import Sum total_time = Task.objects.aggregate(Sum('estimated_time')) res = total_time['estimated_time__sum'] print(res)

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

"6:15:00"

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

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