Нужна помощь в понимании ReferenceProperty - PullRequest
0 голосов
/ 18 октября 2010

Скажем, у меня есть два класса:

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, но может использоваться экземпляр модели?

Если я сделаю:

a2 = b.a_reference

a2 будет иметь тип A, а не key.Означает ли это, что переменная a_reference будет вести себя как экземпляр модели до тех пор, пока этот экземпляр не будет удален, после чего он вернет ключ (указывающий на несуществующий экземпляр)?

1 Ответ

3 голосов
/ 18 октября 2010

ReferenceProperty всегда будет пытаться вернуть экземпляр класса, на который указывает сохраненный ключ. Если указанный объект был удален, я верю, что вы вернетесь Нет. Из документов :

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