如何让Google App Engine中的StructuredProperty更新?

时间:2015-01-04 08:08:02

标签: python google-app-engine google-cloud-datastore app-engine-ndb

我有一个分配给团队的玩家模型。当我将它们分配给一个团队时,当我访问player.team.name时,我会看到正确的团队名称。如果我去团队并重命名,则player.team.name仍会返回旧的团队名称。

  1. 一名球员被分配到“新奥尔良黄蜂队”。 player.team.name是“新奥尔良黄蜂队”。
  2. 将“新奥尔良黄蜂队”改名为“新奥尔良鹈鹕队”。 player.team.name仍然是“新奥尔良黄蜂队”。
  3. 代码:

    class Team(ndb.Model):
      name = ndb.StringProperty()
    
    class Player(ndb.Model):
      name = ndb.StringProperty()
      team = ndb.StructuredProperty(Team)
    

    我有一种感觉,我需要在这里使用KeyProperty,但无法弄清楚它是如何工作的。任何帮助表示赞赏。

1 个答案:

答案 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