Я хочу использовать нумерацию страниц, а не по телефону,
greets, next_curs, more = Greeting.query().fetch_page(10, start_cursor=curs)
но с помощью итераторов запросов. Потому что таким образом я могу использовать тасклеты для объединения всех последовательных "получений", как описано в https://developers.google.com/appengine/docs/python/ndb/async#tasklets
Теперь в моем коде все выглядит так:
class Book(ndb.Model):
author = ndb.KeyProperty('a', kind=User, required=True)
author_key = ndb.Key(urlsafe=user_id)
books_query=Book.query(Book.author == author_key)
@ndb.tasklet
def callback(book):
author = yield book.author.get_async()
raise ndb.Return(book, author)
q_option = {'limit' : 2, 'produce_cursors' : True }
outputs = books_query.map(callback, **q_option)
Не знаю, где что-то идет не так, но если я попытаюсь это сделать,
books_query.iter().cursor_before()
or
books_query.iter().cursor_after()
Это не удается со следующей трассировкой,
raise datastore_errors.BadArgumentError('There is no cursor currently')
BadArgumentError: There is no cursor currently
Любой сложный пример использования итераторов запросов и тасклетов с курсорами был бы действительно полезен, чтобы понять это.