ReferenceProperty 在处理两个模块之间的引用时非常有帮助。狐狸示例:
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_name。
- 为了获得由特定用户实例管理的“团队”,我们使用 user_instance.teams 并迭代。
它看起来不是很容易理解吗?
在使用 NDB 做同样的事情时,我们必须修改
db.ReferenceProperty(UserProf, collection_name='teams')
-->ndb.KeyProperty(kind=UserProf)
team_ins.manager_name.get()
会给你经理的名字要获得由特定用户管理的所有团队,我们必须这样做
for team in Team.query(Team.manager_name == user_ins.key): print "team name:", team.name
正如你所看到的,在 db 中处理这些场景看起来比在 ndb 中更容易和可读。
- ndb 中移除 ReferenceProperty 的原因是什么?
- 甚至 db 的查询 user_instance.teams 也会做与 ndb 的 for 循环中相同的事情。但是在 ndb 中,我们明确提到了使用 for 循环。
- 当我们执行 user_instance.teams 时,幕后发生了什么?
提前致谢..