Фильтрация свойства свойства объекта в движке приложения Google - PullRequest
0 голосов
/ 08 октября 2010

В приложении App Engine я сохраняю зарегистрированных членов в таблице, которая выглядит следующим образом:

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

Проблема начинается, когда мне нужно проверить, есть ли пользователь в моей таблице участников. Документация GAE гласит, что пользовательская ценность не гарантируется, что она не изменится во времени, так как она состоит из объекта user + email Таким образом, это изменится, если пользователь изменит электронную почту в этой учетной записи.

Я использую 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 ]

1 голос
/ 09 октября 2010

Вы должны быть в состоянии сделать это:

u = users.get_current_user()
rm = Member.all().filter('user =', u).get()
0 голосов
/ 08 октября 2010

Возможно, вы сможете идентифицировать своего пользователя по уникальному ключу:

key_name = "member/%s" % users.get_current_user ().user_id
user_ref = Member.get_or_insert (key_name)
0 голосов
/ 08 октября 2010

GAE User API явно упоминает user_id () как постоянный идентификатор, который сохраняется при изменениях электронной почты. Вы можете сохранить его в отдельном поле в модели.

Обратите внимание, что он поддерживается только для учетных записей Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...