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