、私はこのクエリを持っています。これまでのところは良い、データが返さNDBカーソルは一部のクエリデータを記憶していませんか?だから、
results, cursor, more = MyModel.query(
ancestor=mykey,
).order(-MyModel.time).fetch_page(20)
等結構ですそれでは、いくつかのより多くを取得しましょう、ならない我々は?これだけ論理的だと思われます:
results, cursor, more = MyModel.query() \
.order(-MyModel.time) \
.fetch_page(20, start_cursor=Cursor(urlsafe=request.cursor))
そして...奇妙なことが起こります。決定的に多くの結果、順序付けられていない結果...何が起こっているのですか? だから私はそれを変更します。突然
results, cursor, more = MyModel.query(ancestor=mykey) \
.order(-MyModel.time) \
.fetch_page(20, start_cursor=Cursor(urlsafe=request.cursor))
、ワット以下の結果...さんは
.order(-MyModel.time)
を追加してみましょうそして私は、私が期待したものを得ます。
今ここに何かがありますか?カーソルを渡すべきではありませんすでに注文と祖先の世話をする?ドキュメントの最初のページを取得するための注文例がある - https://cloud.google.com/appengine/docs/python/ndb/queries#cursors - しかし、それ以降のページでも順序を設定する必要はありません。私はそれが意図したとおりに実際に動作しているのか、それともバグか知りたいだけです。
実際に意図したとおりに動作している場合は、どこの情報がカーソルに正確に格納されているかについてはどこからでも知ることができますか?将来このようなバグを避けるのに本当に役立つでしょうか? Query Cursors
から
ありがとうございます。 問題はAPIを設計することです。オンラインストアのアイテムのリストを表示するアプリがあるとします。 GAEエンドポイントAPIを呼び出して、最初のN個のアイテムを読み込みます。ユーザーがリストの最後までスクロールすると、追加のページをロードしたい。 しかし、私のクエリオブジェクトはなくなりました!さらに、ユーザーがいくつかのフィルターを使用している可能性があります。私は私の要求にすべてのフィルタを追加し、元のものを作成してカーソルを追加する方法とまったく同じようにクエリ全体を再構築する必要があると思いますか? – mpiekarz
はい、そのような場合は元のリクエストを再作成する必要があります。最初の例は、カーソル情報を「次へ」ボタンのURLにパラメータとして渡す方法を示していますが、エンドポイントでこれが可能かどうかはわかりません(エンドポイントではまだ遊んでいませんでした)。 –