假设我有
class Foo(db.Model):
bar = db.ReferenceProperty(Bar)
foo = Foo.all().get()
有没有办法让我在没有查询数据存储区的情况下执行foo.bar?文档说foo.bar
将是Key
的一个实例,因此我希望能够foo.bar.id()
能够获得id
Bar
这与foo
相关联,但似乎没有那种方式。
PS:我所指的文档部分可以在这里找到:
它说:
“应用程序可以显式地db.get()ReferenceProperty(这是一个Key)的值来测试引用的实体是否存在。”
答案 0 :(得分:8)
正如the docs所说,
ReferenceProperty值可以是 好像它是一个模型实例, 并且数据存储区实体将是 获取并创建模型实例 当它以这种方式首次使用时。 未触及的引用属性不会 查询不需要的数据。
所以只要你不触摸它就可以了,但是如果你这样做的话,例如如你所示,在.id()
调用时,“将获取数据存储区实体”,文档说。更多的文档是here,但它们没有显示出一种神奇地获取id而无需获取的方法。
我没有尝试过,但你可以使用属性的get_value_for_datastore来获取“属性的Python原生值”,我相信它确实是一个关键 - 其{{1} }方法应该可以在没有数据存储区提取的情况下调用。你试过了吗?