在Google应用引擎中过滤Object的属性属性

时间:2010-10-08 12:04:57

标签: python google-app-engine

在App Engine应用程序中,我将注册成员存储在如下所示的表中:

class Member(db.Model):
    user = db.UserProperty(required=True)
    #other stuff

当我需要检查用户是否已经在我的会员表中时,问题就开始了。 GAE文档说用户值不保证不会及时更改,因为它由用户对象+电子邮件组成。因此,如果用户更改该帐户上的电子邮件,它将会更改。

我正在使用OpenID。所以我虽然使用User.federated_identity()作为稳定的标识符。

然而,为了检查这个,我必须做这样的查询:

u = users.get_current_user()
rm = Member.all().filter('user_federated_identity =',u.federated_identity()).get()

这是Django中的有效查询,但显然不在GAE中。我可以在这做什么,将所有成员加载到内存并检查他们的federated_identity?

3 个答案:

答案 0 :(得分:1)

你应该可以这样做:

u = users.get_current_user()
rm = Member.all().filter('user =', u).get()

答案 1 :(得分:0)

也许您可以通过唯一的key_name识别您的用户:

key_name = "member/%s" % users.get_current_user ().user_id
user_ref = Member.get_or_insert (key_name)

答案 2 :(得分:-1)

GAE User API明确提到user_id()是一个永久性标识符,可以在电子邮件更改中保留。您可以将其存储在模型中的单独字段中。

请注意,它仅适用于Google帐户。