一度に 5 つのアイテム (ndb.Model) を表示するアプリに基本的なページングを実装しました。以下のコードを使用してクエリを実行します。
fetched_resutls,next_cursor, more = Content.query(Content.user_email == user_email).order(-Content.sent_time).fetch_page(5, start_cursor=cursor)
ユーザーがアイテムを削除すると、以下のコードを使用してアイテムを削除し、最初の 5 つのアイテムを再クエリします。空のカーソルを渡して削除します。この再クエリ中、さらに項目がありますが、next_cursor は None です。誰でも理由を説明できますか?
contentIntId = int(content_id)
content = Content.get_by_id(contentIntId)
content.key.delete()
fetched_results, next_cursor = Content.find_by_email(user.email(), cursor)
前に削除せずに単純な再クエリを実行すると、次のカーソルが取得されます。
-----編集1-------
find_by_email のコード
def find_by_email(cls, user_email, cursor):
fetched_resutls,next_cursor, more = Content.query(Content.user_email == user_email).order(-Content.sent_time).fetch_page(5, start_cursor=cursor)
li = []
ep = None
for p in fetched_resutls:
ep = p.to_dict()
ep['id'] = str(p.key.id())
li.append(ep)
next_bookmark = None
if more:
next_bookmark = next_cursor.to_websafe_string()
return li, next_bookmark
イベントのシーケンス、
- まず、空のカーソルを使用して単純なクエリを実行します。カーソルを戻すと5つのアイテムが得られます。
- ユーザーがリストからアイテムを削除し、空のカーソルで最初の 5 つのアイテムを再クエリします。アイテムは取得できますが、カーソルは返されません。