您如何在Google App Engine中自动取消引用db.ReferenceProperty?

时间:2010-03-07 04:05:35

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

假设我有

class Foo(db.Model):

  bar = db.ReferenceProperty(Bar)

foo = Foo.all().get()

有没有办法让我在没有查询数据存储区的情况下执行foo.bar?文档说foo.bar将是Key的一个实例,因此我希望能够foo.bar.id()能够获得id Bar这与foo相关联,但似乎没有那种方式。

PS:我所指的文档部分可以在这里找到:

http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#ReferenceProperty

它说:

“应用程序可以显式地db.get()ReferenceProperty(这是一个Key)的值来测试引用的实体是否存在。”

1 个答案:

答案 0 :(得分:8)

正如the docs所说,

  

ReferenceProperty值可以是   好像它是一个模型实例,   并且数据存储区实体将是   获取并创建模型实例   当它以这种方式首次使用时。   未触及的引用属性不会   查询不需要的数据。

所以只要你不触摸它就可以了,但是如果你这样做的话,例如如你所示,在.id()调用时,“将获取数据存储区实体”,文档说。更多的文档是here,但它们没有显示出一种神奇地获取id而无需获取的方法。

我没有尝试过,但你可以使用属性的get_value_for_datastore来获取“属性的Python原生值”,我相信它确实是一个关键 - 其{{1} }方法应该可以在没有数据存储区提取的情况下调用。你试过了吗?