Django - Запрос 10 объектов таблицы до или после даты?
Я читал этот блог о пагинации, но я пытаюсь делать быстрые запросы по времени даты создания. Например, если я получаю запрос и одним из параметров является дата и время, я хочу получить быстрый способ получить следующие 10 созданных постов по порядку. Причина, по которой я не могу использовать этот пост в блоге, заключается в том, что таблица может быть обновлена к тому времени, когда пользователь попытается запросить более старые или новые посты, поскольку она обновляется довольно часто.
Итак, в простом игрушечном примере: Если у меня есть список дат [1-01-2021, 1-05-2021, 1-06-2021]
и я уже отправил 1-01-2021
пользователю, а пользователь отправляет мне эту дату и ожидает следующую единственную дату, он должен вернуть 1-05-2021
, а не возвращать даты, которые у него уже есть.
Как я могу сделать это быстро и эффективно? Я представляю, что это может быть сложно, потому что я должен сначала заказать свой стол. Я хотел бы делать это в двух направлениях - вперед и назад по времени. То есть, если кто-то укажет мне дату, то одна конечная точка вернет 10 сообщений, которые появились после нее, а другая конечная точка, если указать дату, вернет 10 сообщений, предшествующих этой. Как я могу сделать это эффективно и быстро?
Чтобы получить следующую и предыдущую сущности X вокруг заданной даты, вы должны убедиться, что поле проиндексировано (как вы уже сделали с помощью db_index=True
), а затем сделать
n = 5
results_before = Post.objects.filter(created__lt=some_date).order_by("-created")[:n]
results_after = Post.objects.filter(created__gte=some_date).order_by("created")[:n]
и, если нужно, объедините два результата (помня, что results_before
расположен в хронологически обратном порядке, поскольку он получен из базы данных), или передайте их как два списка, что имеет смысл.