Сравнение даты и времени с временной дельтой из другого поля (F () объектов) - PullRequest
0 голосов
/ 06 ноября 2019

Контекст:

Я пытаюсь создать условие для фильтрации набора запросов.

Это подразумевает 2 поля моей модели, одно поле представляет временную дельту (количество минут),одно поле, представляющее дату и время (start_datetime) и datetime.datetime.now() (он же. now).

Я бы хотел проверить, если start_datetime - now <= time_delta.

Общий случай:

Я видел пример (из документа ), в котором мы можем сравнивать две даты (время) и постоянную временную дельту.

>>> from datetime import timedelta
>>> Entry.objects.filter(mod_date__gt=F('pub_date') + timedelta(days=3))

Но что, если это значение содержится в другом поле моей записи?

Способ, которым я пытаюсь создать эту временную дельту, явно недопустим.

>>> from datetime import timedelta
>>> Entry.objects.filter(mod_date__gt=F('pub_date') + timedelta(days=F('n_timedelta')))

Может ли быть решение для достиженияэто с помощью функций ORM? Я хотел бы по возможности избегать использования некоторого необработанного SQL.

1 Ответ

1 голос
/ 06 ноября 2019

Я думаю, что нашел решение.

Я слишком много боролся с различными конверсиями и приведениями, поэтому я попробовал другой способ:

Я применил условие фильтрации к атрибуту time_deltaи использовал разницу между обеими датами, из которых я извлек число секунд, прошедших со времени EPOCH, затем разделил на 60, чтобы получить количество минут:

Что дало что-то вроде:

>>> from django.db.models import F
>>> from django.db.models.functions import Extract, Now
>>> Entry.objects.filter(
...     time_delta__gte=(Extract(F("start_datetime"), "epoch") - Extract(Now(), "epoch"))/60
... )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...