Подтвердить что ты не робот

Получение только ключа /id из ReferenceProperty в приложении Engine

Я мог бы немного помочь в земле AppEngine...

Используя 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

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

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

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

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

значение ReferenceProperty - это ключ

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

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

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

4b9b3361

Ответ 1

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

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

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