0

2 つのクラスがあるとします。

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

ドキュメントには、次の 2 つのことが記載されています。

ReferenceProperty 値はモデル インスタンスのように使用でき、データストア エンティティがフェッチされ、この方法で最初に使用されたときにモデル インスタンスが作成されます。

また、後に次のようにも述べています。

アプリケーションは、ReferenceProperty (キー) の値を明示的に db.get() して、参照されるエンティティが存在するかどうかをテストできます。

それで、それはどういう意味ですか?値は a ですkeyが、モデル インスタンスを使用できますか?

私が行った場合:

a2 = b.a_reference

a2 は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 に答える