Я использую нумерацию страниц в отсортированных моделях, и мои запросы извлекают слишком много данных.Способ отображения ссылок на страницы аналогичен Google: текущая страница подсвечивается и имеется окружающий «отступ» страниц, по которому вы можете перемещаться.Например, если имеется 20 страниц, заполнение равно 5, а вы находитесь на странице 10, ссылки на страницы будут выглядеть следующим образом:
... 5 6 7 8 9 [10] 11 12 1314 15 ...
Дело в том, что мне нужно рассчитать количество страниц ПОСЛЕ текущей страницы, чтобы узнать, сколько ссылок страниц после текущей страницы должно быть показано.Чтобы сделать это, я суммирую количество элементов, которые мне понадобятся для страниц заполнения, плюс текущую страницу, плюс один (чтобы узнать, показывать ли «...»), а затем получить эти результаты.Это приводит к массивному запросу результатов, что, в конечном счете, мне нужно только небольшое подмножество.
Google App Engine api предоставляет count () функцию , которая возвращаетколичество результатов, извлекаемых запросом.Однако он не позволяет мне указать смещение.
Как мне обойти эту проблему?
Я рассматриваю выборку первого элемента на следующей странице после текущей страницы, затемвыполнение count () для другого запроса, который сортирует значения этого элемента, если это имеет смысл.Я на правильном пути или я что-то упускаю полностью?Я относительно новичок в движке приложений, так что иди спокойно!Спасибо :)
ОБНОВЛЕНИЕ:
Спасибо, Питер.
Курсоры - действительно подходящий подход для использования.Вот пример для тех, кто хочет сделать то же самое:
# For example, the following query has 27 results.
book_query = Book.all().filter("name_lowercase < ", "b" )
# Let's fetch 10 books starting at offset 0...
r = book_query.fetch(10, 0)
# This returns a cursor to the book after the last fetched result, index 10
c = book_query.cursor()
# Now let's count the number of results after our fetch, limit 100.
# To use cursors, the query must be exactly the same.
book_query2 = Book.all().filter("name_lowercase < ", "b" ).with_cursor(c)
book_query2.count(100) # Returns 17