Запрос N строк по идентификатору строки со сложным упорядочиванием в Django ORM

По идентификатору ссылки я хочу запросить N строк, чтобы строка с идентификатором ссылки была в середине. Я знаю, как это сделать, когда QuerySet просто упорядочен по столбцу id, но мое решение разваливается, когда я хочу упорядочить результаты по столбцу, отличному от id (поскольку идентификаторы больше не являются последовательными) или по нескольким столбцам (например, (title, created_at)).

Например, если бы у меня было 5 элементов в таблице ниже, и я хотел бы запросить 3 элемента с идентификатором ссылки 3, это выбрало бы строки с идентификаторами 2, 3 и 4:

Id Title
1 One
2 (Selected) Two
3 (Selected) Three
4 (Selected) Four
5 Five

Я попытался использовать функцию Window() с выражением RowNumber() для присвоения номеров строк отсортированному списку элементов, а затем запросить элементы до и после номера строки id ссылки, что, неудивительно, не сработало, поскольку номера строк вычисляются заново при каждом запросе.

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