ReferenceProperty очень помог справиться с ссылками между двумя модулями. Пример Fox:
class UserProf(db.Model):
name = db.StringProperty(required=True)
class Team(db.Model):
manager_name = db.ReferenceProperty(UserProf, collection_name='teams')
name = db.StringProperty(required=True)
- Чтобы получить 'manager_name' с экземпляром команды, мы используем имя team_ins.manager_.
- Чтобы получить "команды", которые управляются конкретным экземпляром пользователя, мы используем user_instance.teams и итерацию.
Разве это не выглядит легко и понятно?
Выполняя то же самое, используя NDB, мы должны изменить
db.ReferenceProperty(UserProf, collection_name = 'teams') → ndb.KeyProperty(kind = UserProf)
- team_ins.manager_name.get() предоставит вам имя менеджера
-
Чтобы получить всю команду, которая является ядром конкретного пользователя, мы должны сделать
для команды в Team.query(Team.manager_name == user_ins.key): (Форматирование здесь не работает)
print "team name:", team.name
Как вы можете видеть, что подобные сценарии выглядят проще и читабельнее в db, чем ndb.
- В чем причина удаления ReferenceProperty в ndb?
- Даже запрос db user_instance.teams сделал бы то же самое, что и в ndb for loop. Но в ndb мы явно упоминаем использование для цикла.
- Что происходит за кулисами, когда мы делаем user_instance.teams?
Спасибо заранее.