Получение только ключа /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() не вызовет поиск хранилища данных?
Ответы
Ответ 1
Отвечая на мой собственный вопрос ради помощи коллегам-искателям...
Как и предполагалось, вызов story.author.key(). id() или даже story.author.id() приведет к запросам хранилища данных. Правильный метод который диктуется документами API:
story = db.get(story_key)
author_id = Story.author.get_value_for_datastore(story).id()