Я бы порекомендовал другой подход, который менее "реляционно-ориентирован", чем ваши UserPage
отношения:
class User(db.Model):
id = db.StringProperty(required=True)
created = db.DateTimeProperty(auto_now_add=True)
updated = db.DateTimeProperty(auto_now=True)
name = db.StringProperty(required=True)
email = db.StringProperty()
class Page(db.Model):
id = db.StringProperty(required=True)
created = db.DateTimeProperty(auto_now_add=True)
updated = db.DateTimeProperty(auto_now=True)
name = db.StringProperty(required=True)
link = db.StringProperty(required=True)
# Users linking to this page
users = db.ListProperty(db.Key)
И тогда вы можете получить все страницы определенного пользователя с помощью следующего запроса:
Page.gql("WHERE users = :1", user.key())
Обратите внимание, что вы должны разместить свойство списка ключей на той стороне, где вы ожидаете меньше элементов.Я предполагал, что у вас будет меньше пользователей, которым нравится страница, чем страниц, связанных с пользователем, поэтому я поставил ее на сторону Page
, но это будет зависеть от вашего конкретного варианта использования.
Смотрите официальные рекомендации по теме «многие ко многим»: http://code.google.com/appengine/articles/modeling.html