Как рассчитать продолжительность, используя поля startTime и endTime в QuerySet в Django?

У меня есть эта модель:

class TimeInterval(models.Model):
    startTime = models.DateTimeField()
    endTime = models.DateTimeField()

Как я могу агрегировать средний временной интервал, используя только API QuerySet?

Я пробовал это:

qs = TimeInterval.objects.extra(
    select={"duration": "endTime - startTime"}).aggregate(
        Avg("duration"))

но выдает:

FieldError: Cannot resolve keyword 'duration' into field. Choices are:
endTime, startTime

person Benji Mizrahi    schedule 27.08.2012    source источник
comment
Django не поддерживает агрегирование полей, добавленных с помощью extra. Ответы на этот вопрос содержат некоторые предложения о том, как обойти это ограничение.   -  person Gareth Rees    schedule 28.08.2012
comment
comment
@GarethRees, да, это тот же вопрос, заменяющий STRFTIME на DATEDIFF   -  person dani herrera    schedule 28.08.2012
comment
другой обходной путь основан на том факте, что Avg(duration) равно Sum(endTime) - Sum(startTime) / Count или, почти, Avg(endTime) - Avg(startTime)   -  person okm    schedule 28.08.2012


Ответы (1)


Я буду использовать обходной путь для этого.

Создайте новое поле под названием «длительность».

Создайте pre-save_signal для TimeInterval, который будет вычислять значение продолжительности.

Затем вы можете легко использовать поле продолжительности в своих запросах.

person dannyroa    schedule 27.08.2012