0

Pythonでこのコードを使用して、Googleアプリストアでエンティティの特定のモデルを呼び出そうとしています:

class Profile(BlogHandler):
    def get(self):
        user = users.get_current_user()

        if user:
            user = users.get_current_user()
            user_db_qry = User.query(User.theid == user.federated_identity())
            #theid is how I have saved each user's federated id in the User entity in the datastore
            user_db_list = user_db_qry.fetch(1)
            profile_user = user_db_list[0]
            profile_id = profile_user.key().id_or_name()
            #I am trying to get the datastore created ID/Name here and this is the line that gives me the error

            self.redirect('/profile/%s' % str(profile_id))
        else:
            self.redirect("/about")

そのため、何が問題なのかよくわかりません。私のクエリは間違っていますか?

4

3 に答える 3

4

はじめに、私は GAE の経験がありません。この回答は、純粋に API ドキュメントに基づいています

ドキュメントは、モデルインスタンスのみがクラスkey()を返すメソッドを持っていると主張しています。ただし、クラスは独自の種類のエンティティのようです。KeyUser

キー インスタンスにアクセスしようとする代わりに、ダイレクト メソッドを使用できる場合があります。

profile_id = profile_user.user_id()
profile_nick = profile_user.nickname()

ユーザーのメンバーに何が含まれているかを調査したい場合keyは、チェックアウトしてデバッグできます。

print type(profile_user.key)
print dir(profile_user.key)

アップデート

あなたのコメントでは、問題を説明するNDBバリアントを使用していることを明確にしました。NDB キー クラスは DBキークラスとは異なります。メソッドはありませんid_or_name()。それが持っているものは次のとおりです。

id()最後の (kind, id) ペアの文字列または整数の ID を返します。キーが不完全な場合は None を返します。

string_id()最後の (kind, id) ペアの文字列 ID を返します。キーの ID が整数であるか不完全な場合は None を返します。

integer_id()最後の (kind, id) ペアの整数 ID を返します。キーに文字列 ID がある場合、または不完全な場合は None を返します。

于 2012-06-30T04:15:21.463 に答える
2
        profile_id = profile_user.key().id_or_name()

括弧の最初のセットは必要ありません。

        profile_id = profile_user.key.id_or_name()
于 2012-06-30T03:37:42.090 に答える
0

他の場所で書いたことに基づいて、エンティティのキ​​ーをどのように割り当てていますか? 代わりに名前を付けていますか?

次のようなキー パスを使用している場合: (注:親という意味ではなく、単にキー パスという意味です)

ndb.Key.from_path(..."User", "harold")

キーの場合、キーは ID に対して None を返しますが、(ndb同様に機能する場合db) name 属性を持つ必要があります。

これを理解する最も簡単な方法は、SDK でアプリを実行して に移動しhttp://localhost:8080/_ah/admin、インタラクティブ コンソールを開いて、必要なプロパティが得られるまで (おそらくすべての) プロパティを試すことです。アプリ エンジンでは、奇妙なエラーをキャッチするのに役立つことがよくあります (たとえば、API 呼び出しの多くは、位置引数ではなくキーワード引数で使用しようとすると失敗するなど)。

また、生成したキーからndb.Key.from_path()ユーザー インスタンスを参照して、キーを正しくインスタンス化/取得/取得しているかどうかを確認することをお勧めします。

于 2012-06-30T05:26:20.827 に答える