Лучший способ получить объект модели, который имеет поле 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]