Разница во времени между двумя полями

#django #django-orm

#django #django-orm

Вопрос:

Я ищу объекты, в которых интервал времени между двумя полями превышает определенное количество дней.

На самом деле у меня есть дата отправки письма и дата получения одобрения. Если утверждение не получено, скажем, через 30 дней, эти объекты должны быть включены в набор запросов.

Я могу сделать что-то вроде приведенного ниже, где дельта является чем-то статическим. Однако мне это не нужно datetime.date.today() для начала, но нужно сравнить с другим объектом.

 delta = datetime.date.today() - datetime.timedelta(30)
return qs.filter(letter_sent__isnull=False)
    .filter(approval_from__isnull=True)
    .filter(letter_sent__gte=delta)
  

Любой указатель, как это сделать?

Ответ №1:

Похоже, вы хотите аннотировать F объект. Что-то вроде этого:

 from django.db.models import DurationField, ExpressionWrapper, F

delta = datetime.timedelta(days=30)
expression = F('approval_from') - F('letter_sent')
wrapped_expression = ExpressionWrapper(expression, DurationField())
qs = qs.annotate(delta=wrapped_expression)
qs = qs.filter(delta__gte=delta)
  

Ответ №2:

Вы также можете сделать это наоборот. Просто держите F(«num_days») вне timedelta, потому что timedelta не знает о F() .

 from datetime import timedelta
expression = F('approval_from') - timedelta(days=1) * F("num_days")
wrapped_expression = ExpressionWrapper(expression, DateTimeField())
qs = qs.annotate(letter_sent_annotation=wrapped_expression)
qs = qs.filter(letter_sent__gte=letter_sent_annotation)