Django использует LimitOffsetPagination при изменении результатов?

Я использую django rest frame work и хочу LimitOffsetPagination

https://www.django-rest-framework.org/api-guide/pagination/#limitoffsetpagination

для работы с json-выводом моего представления

class MyList(generics.ListAPIView)

, в котором потенциально можно просмотреть тысячи записей.

Я не могу понять, как заставить его работать так, как нужно, без извлечения всех потенциальных записей против только фрагмента, необходимого для данной страницы.

Проблема возникает из-за того, что мне приходится изменять записи перед возвратом из представления, я не могу просто вернуть набор запросов, я возвращаю свой настроенный список записей.

Если я просто выполняю некоторые манипуляции с кверисетом и возвращаю кверисет, все работает отлично. SQL к БД использует LIMIT и OFFSET, поэтому работает быстро, страница записей извлекается, а json выводится на страницу, как и ожидалось.

Однако мне нужно изменить результаты кверисета, и как только я его оцениваю

mylist = list(queryset)

SQL НЕ использует LIMIT и OFFSET, он получает все записи.

Если я использую нотацию slice в наборе запросов queryset[offset:offset+limit] чтобы заставить его получить только то, что мне нужно, а затем изменить эти результаты, что работает до определенного момента (SQL использует LIMIT и OFFSET и т.д.).

Проблема заключается в том, что, скажем, фрагмент состоит из 100 записей, пагинатор будет думать, что всего нужно просмотреть 100 записей, в то время как обычно их несколько тысяч. Таким образом, ссылки на следующую/предыдущую страницу будут неверными, потому что они основаны на общем количестве в 100 записей, а не на реальных тысячах.

Должен ли я делать это каким-то другим способом?

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