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 расположен в хронологически обратном порядке, поскольку он получен из базы данных), или передайте их как два списка, что имеет смысл.

Вернуться на верх