从App Engine中的ReferenceProperty中获取Key/id

Chr*_*loe 16 python google-app-engine google-cloud-datastore

我可以在AppEngine土地上使用一些帮助......

使用[Python] API我从文档中创建这个例子的关系:

class Author(db.Model):
    name = db.StringProperty()

class Story(db.Model):
    author = db.ReferenceProperty(Author)

story = db.get(story_key)
author_name = story.author.name
Run Code Online (Sandbox Code Playgroud)

据我了解,该示例将进行两次数据存储查询.一个用于获取故事,然后一个用于尊重作者以便访问该名称.但是我希望能够获取id,所以做类似的事情:

story = db.get(story_key)
author_id = story.author.key().id()
Run Code Online (Sandbox Code Playgroud)

我想刚刚得到的参考ID.我不想依赖(因此查询数据存储区)ReferenceProperty值.

从阅读文档说它

ReferenceProperty的值是一个Key

这让我觉得我可以在引用的值上调用.id().但它也说:

ReferenceProperty模型提供Key属性值的功能,例如自动解除引用.

我找不到任何可以解释何时进行此引用的内容?
在ReferenceProperty的值上调用.id()是否安全?
是否可以假设调用.id()不会导致数据存储查找?

Chr*_*loe 27

为了帮助其他搜索者回答我自己的问题......

怀疑调用story.author.key().id()甚至story.author.id()会导致数据存储区查询.API文档规定的正确方法是:

story = db.get(story_key)
author_id = Story.author.get_value_for_datastore(story).id()
Run Code Online (Sandbox Code Playgroud)