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