Извлечение только ключа / идентификатора из ReferenceProperty в App Engine - PullRequest
16 голосов
/ 15 июня 2010

Я мог бы использовать небольшую помощь в AppEngine Land ...

Используя API [Python], я создаю отношения, подобные этому примеру из документов:

class Author(db.Model):
    name = db.StringProperty()

class Story(db.Model):
    author = db.ReferenceProperty(Author)

story = db.get(story_key)
author_name = story.author.name

Насколько я понимаю, в этом примере будет два запроса к хранилищу данных. Один для извлечения Story, а другой - для того, чтобы почтить Автор, чтобы получить доступ к имени. Но я хочу иметь возможность получить идентификатор, поэтому сделайте что-то вроде:

story = db.get(story_key)
author_id = story.author.key().id()

Я хочу просто получить идентификатор из ссылки. Я не хочу задерживать (поэтому запрашивать хранилище данных) значение ReferenceProperty.

Из прочтения документации говорит, что

значение ReferenceProperty является ключом

Что заставляет меня думать, что я мог бы просто вызвать .id () для значения ссылки. Но это также говорит:

Модель ReferenceProperty предоставляет функции для значений свойств Key, такие как автоматическое разыменование.

Я не могу найти ничего, что объясняет , когда эта ссылка имеет место?
Безопасно ли вызывать .id () для значения ReferenceProperty?
Можно ли предположить, что вызов .id () не вызовет поиск в хранилище данных?

1 Ответ

26 голосов
/ 15 июня 2010

Отвечая на мой вопрос ради помощи коллегам-поисковикам ...

При подозрении, что вызов story.author.key (). Id () или даже story.author.id () приведет к хранилищу данныхзапросы.Правильный метод , продиктованный документами API :

story = db.get(story_key)
author_id = Story.author.get_value_for_datastore(story).id()
...