0

假设我有两个课程:

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()

文档说明了以下两件事:

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

后来还说:

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

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

如果我做:

a2 = b.a_reference

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

4

1 回答 1

3

ReferenceProperty 将始终尝试返回存储的键指向的类的实例。如果引用的对象已经被删除,相信你会找回None。从文档

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()
于 2010-10-18T17:16:32.793 回答