我有一个分配给团队的玩家模型。当我将它们分配给一个团队时,当我访问player.team.name时,我会看到正确的团队名称。如果我去团队并重命名,则player.team.name仍会返回旧的团队名称。
代码:
class Team(ndb.Model):
name = ndb.StringProperty()
class Player(ndb.Model):
name = ndb.StringProperty()
team = ndb.StructuredProperty(Team)
我有一种感觉,我需要在这里使用KeyProperty,但无法弄清楚它是如何工作的。任何帮助表示赞赏。
答案 0 :(得分:0)
StructuredProperty将Team实体存储在Player实体中(即,它有一个团队的副本)。因此,您需要找到作为团队成员的每个玩家,并使用新名称更新Player.team条目。
使用KeyProperty将存储对Team实体的引用。检索播放器时,您需要执行单独的get调用以检索关联的Team。
模型看起来像:
class Team(ndb.Model):
name = ndb.StringProperty()
class Player(ndb.Model):
name = ndb.StringProperty()
team = ndb.KeyProperty(kind=Team)
与球队一起存储球员:
team = #look up an existing team entity
player = Player()
player.name = "Joe"
player.team = team.key()
player.put()
要使用其团队名称检索播放器,您需要:
player = ....
players_team = Team.get_by_id(player.team)
players_team.name # to access the name