get_by_id和父键

时间:2012-07-06 12:02:21

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

我曾使用get_by_id从数据存储中获取实体,从不使用Ancestor Paths。但我的模型的复杂性使它成为必要。事实上,Ancestor Paths解决了一个大问题,但现在当我尝试get_by_id时,如果实体拥有父键,则实体返回None。这意味着我需要添加父键:

entity = MyModel.get_by_id(id)

这将成为:

entity = MyModel.get_by_id(id, parent=key)

如何构建父键?

编辑:

此时我更喜欢留下祖先路径并添加另一个关键属性。

1 个答案:

答案 0 :(得分:7)

如果您想使用实体组,您只需创建一个类似的键:

key_parent = db.Key.from_path('MyModelParent', 'id_parent') # You don't have to create this kind in the datastore.

id = int(self.request.get('id'))
entity = MyModel.get_by_id(id, parent=key_parent)

我注意到:你使用大写的key参数。它是而不是

entity = MyModel.get_by_id(id, Parent=key) # Wrong
entity = MyModel.get_by_id(id, parent=key)

哦,你正在使用NDB:

key_parent = ndb.Key('MyModelParent', 'id_parent')