[Google App Engine] Как использовать фильтр ()? - PullRequest
1 голос
/ 21 марта 2011

Я начинаю работать с Google App Engine и хочу создать что-то вроде твиттера.

class User(db.Model):
  account = db.StringProperty()
  password = db.StringProperty()
  name = db.StringProperty()

class Message(db.Model):
  user = db.ReferenceProperty()
  text = StringProperty()
  created = DateTimeProperty(auto_now=True)

Как получить твит конкретного человека? Я стараюсь

que = db.Query(Message).order('-created').filter("user['account'] = ",'Tom')

Но это ошибка. Могу ли я получить доступ к свойствам пользователя?

Ответы [ 2 ]

6 голосов
/ 21 марта 2011

Нет операции GQL JOIN.Прочтите статью о моделировании отношений , чтобы узнать о некоторых других методах, которые вы можете использовать.Кроме того, обязательно посмотрите Создание масштабируемых, сложных приложений на App Engine , это будет стоить вашего времени.

С вашими текущими моделями вам нужно будет выбрать пользовательский объект (илисоздайте его ключ!) затем запросите его.Например:

user = User.all(keys_only=True).filter('account', 'Tom').get()  # only get one.
# or, build the key (if possible)
user = db.Key.from_path('User', 'tom')  # if you make 'account' the key_name

messages = Message.all().order('-created').filter("user =", user)

Другим вариантом является деномализация дизайна и сохранение «учетной записи» в сообщении:

class Message(db.Model):
  user = db.ReferenceProperty()
  account = StringProperty()
  text = StringProperty()
  created = DateTimeProperty(auto_now=True)

messages = Message.all().order('-created').filter("account =", 'tom')
0 голосов
/ 21 марта 2011

То, что сказал Роберт Клюин, было правильным.Также я вижу это в вашей модели.

user = db.ReferenceProperty()

Я думаю, что это должно быть user=db.ReferenceProperty(User)

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