Лучший способ получить объект модели, который имеет поле DateTime, наиболее близкое по DateTime к текущему DateTime

Я хочу сделать эффективный ORM-запрос, который возвращает объект модели, в котором время даты объекта наиболее близко к текущему времени.

Итак, если текущее время даты равно 22/08/2022 15:00, а у меня есть объекты с датами object1.datetime == 22/08/2022 15:30 и object2.datetime == 22/08/2022 15:45, я хочу иметь возможность запросить в БД объект с наиболее близкой датой, которым будет объект object1.

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

Единственные решения, которые я смог придумать, неэффективны и включают в себя циклы и сравнение нескольких объектов путем добавления их в списки и т.д.

dt = datetime.datetime.now()
objs = Model.objects.all()
for obj in objs:
    if obj.dateTime //etc...
<

Попробуйте что-нибудь вроде:

dt = original_object.dateTime

# get all objects with date later or equal to current
query = Model.objects.filter(dateTime__gte=dt)

# order them by `dateTime`
query = query.order_by("dateTime")

# exclude original object
query = query.exclude(id=original_object.id)

# pick first, since it should be the closest to your original object
closest_object = query.first()

Использование objects.filter range datetimes и упорядочивание набора запросов

model.objects.filter(date__gte=d2,date__lte=d1).order_by('date')[0]
Вернуться на верх