【问题标题】:How can I add/change the parent of an entity after it has been created but before it is put in the Datastore?如何在创建实体后但在将其放入数据存储区之前添加/更改实体的父级?
【发布时间】:2016-06-09 16:41:49
【问题描述】:

根据我在文档中阅读的内容,将实体放入数据存储区后无法更改实体的父级。但我正在寻找一种在此之前(但在创建之后)更改父级的方法。所以不要这样:

John = Student(parent=BlueClassroom.key, name="John", last_name="Smith")
John.put()

我正在寻找这样的东西:

John = Student(name="John", last_name="Smith")
John.parent = BlueClassroom.key
John.put()

现在,第一个有效,但第二个无效(它只是忽略了第二行)。我也尝试过使用填充,但这仅适用于常规属性。有没有办法做到这一点?

【问题讨论】:

  • 语句John.parent = BlueClassroom.key 没有更改密钥,它只是将一个名为parent 的新属性添加到实体John。您的第一个示例是设置密钥父级的正确方法,当您知道父级时为什么不使用它?
  • 因为我不知道那个阶段的父母是什么,那是在另一个函数中确定的。我可能应该重新安排所有内容,以便可以在一个地方完成,但我想知道是否有办法像现在这样。

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


【解决方案1】:

根据NDB Model Class Constructor 文档:

您无法轻松定义名为“key”、“id”、“parent”或 “命名空间”。例如,如果您在构造函数中传递 key="foo" 或 populate() 调用,它设置实体的键,而不是属性属性 命名为“钥匙”。

我建议将数据作为 dict 传递,直到您准备好创建实体:

john = {name="John", last_name="Smith"}
...
John = Student(parent=BlueClassroom.key)
John.populate(john)

【讨论】:

  • 我在文档中看到了这一点,但我想知道是否还有一种方法可以在此之后(但在放置之前)定义父级。由于找不到方法,我将数据作为字典传递。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
相关资源
最近更新 更多