Django ORM Запрос для нахождения среднего значения между временными метками
Я пытаюсь понять, как структурировать запрос.
У меня есть три модели, которые я унаследовал, билеты, комментарии и действия:
class Ticket(models.Model):
date = models.DateTimeField(default=datetime.datetime.now, blank=True)
subject = models.CharField(max_length=256)
description = models.TextField()
И
class Comments(models.Model):
date = models.DateTimeField(default=datetime.datetime.now, blank=True)
comment = models.TextField()
action = models.ForeignKey(Label, on_delete=models.CASCADE, limit_choices_to={'group__name': 'action'}, related_name='action_label')
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
И
class Label(models.Model):
name = models.CharField(max_length=50)
group = models.ForeignKey(LabelGroup, on_delete=models.CASCADE)
Моя цель - получить средний промежуток времени между Ticket.date (открыто) и последним Comment.date типа Label.name = containment. Наконец, я хочу передать диапазон дат (начальная_дата, конечная_дата), чтобы ограничиться только билетами в пределах этого периода времени.
В конечном итоге, я хочу вернуть:
{
avg_time_to_contain: 37,
avg_time_to_recover: 157
}
с точки зрения DRF.
Набор запросов, который у меня есть на данный момент, следующий:
queryset = Comments.objects.filter(ticket__date__gte=start_date, ticket__date__lte=end_date).filter(action__name__icontains="containment").distinct(ticket).aggregate(avg_containment=Avg(F(date)- F(ticket__date)))
Я получаю ошибку, говорящую, что инцидент не определен. Я полагаю, что это связано с моей отличительной функцией, но мне трудно заставить свой мозг перевести то, что мне нужно.
Псевдокод для запроса (в моем представлении),
- Захватите комментарии, в которых есть билеты (FK) с датами между датой начала / окончания
- Фильтр по имени действия (FK), в котором содержится работа
- Просто возьмите один отдельный билет за раз (чувствую, что делаю это неправильно, в основном я хочу иметь последнюю запись для каждого билета, чтобы иметь возможность получить разницу между открытым и последним комментарием сдерживания, а затем усреднить разницу во времени)
- Получаем среднее значение комментария даты сдерживания - даты открытия.
Спасибо за любой свет, который вы можете пролить, чтобы помочь мне попасть туда, куда я хочу попасть.
BCBB
Очевидно, ИИ принял ваш вопрос и ответил на него: https://twitter.com/taranjeetio/status/1598392124373803008