Невозможно получить доступ к свойству ID из сущности хранилища данных - PullRequest
7 голосов
/ 08 февраля 2010

Используя Google App Engine SDK и Python, я сталкиваюсь с проблемой: я не могу получить доступ к свойству ID свойств данного объекта. Доступны только те свойства, которые определены в моей модели класса, плюс свойство ключа (см. Ответ ниже):

class Question(db.Model):
    text = db.StringProperty()
    answers = db.StringListProperty()
    user = db.UserProperty()
    datetime = db.DateTimeProperty()

Я могу получить доступ к тексту, ответам, пользователю, дате и ключевым свойствам. Однако я не могу получить доступ к свойству ID. Например, после выборки всех сущностей (используя Question.all ()):

# OK Within a template, this will return a string :
{{ question.text }}
# OK, this will return the entity key :
{{ question.key }}

# KO this will return nothing :
{{ question.id }}

Есть идеи? Спасибо!

Ответы [ 2 ]

11 голосов
/ 08 февраля 2010

Согласно документации , для подклассов модели не определен id() метод экземпляра.

Попробуйте {{ question.key }} вместо.

Также обратите внимание, что ключ не создается до тех пор, пока объект не будет сохранен в хранилище данных.


Редактировать: дополнительная информация, основанная на редактировании ОП:

Поскольку мы действительно после числового идентификатора , мы можем сделать что-то подобное в нашем шаблоне:

{{ question.key.id }}

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

5 голосов
/ 08 февраля 2010

Я только что нашел возможное (не элегантное, IMO) решение. После запроса и выборки сущностей, переберите их всех и добавьте параметр id вручную:

query = Question.all()
questions = query.fetch(10)

# Add ID property :
for question in questions:
    question.id = str(question.key().id())

Я не думаю, что это эффективный процессор, но он работает как быстрое / грязное исправление.

...