0

Requestというモデルがあります。リクエストは、次のように親ユーザーで作成されます。

request = Request(parentUserKey)

ここで、ユーザーのkey_nameはそのユーザーの電子メールであるため、新しいユーザーを作成するときは、次のようにします。

user = User(key_name = 'abc@gmail.com')

だから私が今やりたいのは、リクエストにKey.from_pathを使用してキーを作成することなので、次のことを試してみます。

requestKey = Key.from_path('User', 'abc@gmail.com', 'Request', 1)

このキーを使用して、IDが1より大きいすべてのリクエスト(またはその他の任意のint)を次のようにフェッチするため、1を入力します。

requestQuery.filter("__key__ >", requestKey)

次に、テストの目的で、を介してキーを文字列に変換しようとしましたkeyString = str(requestKey)が、次のエラーが発生します。

Cannot string encode an incomplete key

私は何が間違っているのですか?

4

2 に答える 2

2

Guidoが書いたことを詳しく説明するために、このすべての作業を手動でキーを作成することは、おそらく問題を解決するための最良のアプローチではありません。むしろ、すべてのユーザーのリクエストエンティティをユーザーのエンティティグループに保存すると、祖先クエリを使用してそれらを簡単かつ簡単に取得できます。

まず、すべてのRequestエンティティをUserの子にするために、Requestオブジェクトをインスタンス化する方法を少し変更します。

request = Request(parent=parentUser) # Where parentuser is a User already in the datastore
# Do whatever else you need to do to initialize this entity
request.put()

ここで、Userに属するすべてのRequestオブジェクトを取得するには、次のようにします。

requests = Request.all().ancestor(parentUser).fetch(1000)
# Obviously, you want to intelligently manage the condition of having
# more that 1000 Requests using cursors if need be.

すべてのパス情報を使用して手動でキーを作成できることは素晴らしいことですが、多くの場合、必要以上に手間がかかります。

これはあなたのユースケースを解決しますか?

于 2012-04-17T17:18:05.303 に答える
1

A key with a 0 id is not valid. Instead of that filter, use an ancestor query.

于 2012-04-17T04:46:17.297 に答える