Как я должен сериализовать / ссылаться на пользователей App Engine? - PullRequest
2 голосов
/ 17 мая 2011

Это продолжение этого вопроса:

Как правильно ссылаться на пользователей в запросах GQL в App Engine?

В моем приложении установленоФото db.Model, где каждая фотография имеет свой UserProperty.Я хочу отобразить список пользователей, в котором при нажатии на пользователя будут показаны все его фотографии.

Как лучше всего ссылаться на пользователя при создании ссылки на страницу с фотографиями пользователя?

Я нашел два варианта, оба из которых имеют свои недостатки.

  1. user.nickname () - это можно использовать в запросе GQL (например, Photos.gql(«WHERE user = USER (: 1)», user.nickname ())), но он может измениться, он не обязательно уникален, а иногда (например, для адресов Gmail) user.nickname () усекается в символе «@»и не может использоваться для поиска без добавления "@ gmail.com".
  2. user.user_id () - это уникально, но я не нашел способа поискаuser by user_id ()

Есть ли лучший способ сделать это?В настоящее время я сохраняю как user, так и user_id () в модели Photo, выполняю GQL-поиск по user_id, переданному по ссылке, а затем ссылаюсь на пользователя из UserProperty в модели Photo.

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

Используйте user_id. «поиск» пользователя на самом деле не имеет смысла, если только вы не хотите получить его адрес электронной почты и / или псевдоним. У вас должна быть таблица пользователей, в которой хранятся User объекты с ключом user_id, а также любая другая необходимая для них информация о сайте (например, настройки, информация профиля).

2 голосов
/ 17 мая 2011

Я думаю, что лучший способ - передать user_id в качестве имени ключа и использовать get_or_insert ()

import models
from google.appengine.ext import db
from google.appengine.api import users
class Photo( db.Model ):
    owner = db.UserProperty()
    title = db.StringProperty()

photo = Photo(key_name=users.get_current_user().user_id())
photo.owner=users.get_current_user()
photo.title= 'hai'
photo.put()
user_id = users.get_current_user().user_id()

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