2012-09-02 5 views
5

GoogleAppEngineでNDBを使用していますが、クエリに電子メールを渡してインスタンスKeyまたはIDを取得したいとします。インスタンスのNDB投影KeyまたはID

私のモデルは次のようになります。

class Users(ndb.Model): 
    user_name = ndb.StringProperty(required=True) 
    user_email = ndb.StringProperty(required=True) 
    user_password = ndb.StringProperty(required=True) 

    @classmethod 
    def get_password_by_email(cls, email): 
     return Users.query(Users.user_email == email).get(projection=[Users.key, Users.user_password]) 

コードを実行すると、私は次のエラーを取得:私はを通じてユーザーを照会することによって、インスタンスIDまたはキーを取得できますか

BadProjectionError: Projecting on unknown property __key__ 

をAppEngineのNDBの電子メール(ログインプロセスなど)?

ありがとうございます!

+0

私は_You'reはおそらく、なぜパスワードIncorrectly_ http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html – Lipis

+0

を保存するという感覚を持っていますか?私はプレーンテキストとして保存していません... –

答えて

13

投影クエリは常にkeys_onlyが十分でないので、もしあなたがして、指定したキーだけでなく、フィールドが含まれます:

return Users.query(Users.user_email == email).get(projection=[Users.password]) 
+0

ありがとう、それを実現していない!作品! –

5

あなただけがキーのみのクエリを試すことができ、キーが必要な場合:

Users.query(Users.user_email == email).get(keys_only=True)