需要帮助理解ReferenceProperty

时间:2010-10-18 17:01:11

标签: python google-app-engine referenceproperty

说我有两个班级:

class A(db.Model):

class B(db.Model):
    a_reference = ReferenceProperty(A)

我现在可以执行以下操作:

a = A()
a.put()

b = B();
b.a_reference = a.key()

b.put()

documentation说明了以下两点:

  

ReferenceProperty值可以像使用模型实例一样使用,并且将获取数据存储区实体,并在以这种方式首次使用时创建模型实例。

后来还说:

  

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

那是什么意思?值是key,但它可以用作模型实例吗?

如果我这样做:

a2 = b.a_reference

a2的类型为A,而不是key。这是否意味着变量a_reference的行为类似于模型实例,直到该实例被删除,然后它将返回一个键(指向一个不存在的实例)?

1 个答案:

答案 0 :(得分:3)

ReferenceProperty将始终尝试返回存储键指向的类的实例。如果引用的对象已被删除,我相信你会回来无。 From the docs

obj1 = obj2.reference

if not obj1:
    # Referenced entity was deleted.

如果您想获取最初存储的密钥,可以使用get_value_for_datastore

a = A()
a.put()

b = B();
b.a_reference = a.key()

b.put()

orginial_key = b.a_reference.get_value_for_datastore()