NDB MyModel.get_by_id()无法通过key_name查找实体

时间:2013-09-10 14:50:38

标签: google-app-engine python-2.7 app-engine-ndb

我正在实施OAuth2身份验证过程。

我使用名为Client的模型。第一步,调用API以获取请求令牌,创建客户端实体并临时将令牌和秘密存储在客户端实体中。第二步,用户授权应用程序并重定向到回调页面后...我需要获得相同的客户端实体并更新新检索的访问令牌和秘密。

在我的第一步中,我有这个:

key_name = 'service.%s' % (self.user.key.urlsafe(),)
client = Client.get_or_insert(
            key_name,
            parent=self.user.key,
            name='flickr',
            token=request_token['oauth_token'],
        )

在我的第二步中,我试图通过key_name获取客户端:

key_name = 'service.%s' % (self.user.key.urlsafe(),)
client = Client.get_by_id(key_name)

不幸的是,我无法在第二步中获取客户端...我尝试在步骤1中打印出string_id并在第二步中检查key_name,它们是相同的!但是我仍然没有......我正在遵循cheat sheet方法,如果我使用了错误的方法,请纠正我......

P.S。我实际上是连接到Flickr,如果你有更好的方法来做OAuth2,也可以自由推荐!非常感谢!

1 个答案:

答案 0 :(得分:3)

你也需要传递父母

client = Client.get_by_id(key_name, parent=self.user.key)

编辑原因:

由于您在插入中放置了父级,因此get_by_id()只查找顶级,您需要在正确的组中查找它。您也可以通过键获得它:

client = ndb.Key(YourUserModel, userId, Client, key_name).get()