Используя 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 }}
Какие-либо идеи? Спасибо!
Согласно документации , не существует метода экземпляра id ()
, определенного для подклассов модели.
Попробуйте вместо этого {{question.key}}
.
Также обратите внимание, что ключ не создается, пока объект не будет сохранен в хранилище данных.
Правка: дополнительная информация основана на редактировании OP:
Поскольку нам действительно нужен числовой идентификатор , мы могли бы сделать что-то вроде этого в нашем шаблоне:
{{question.key. id}}
Еще одно замечание: никогда не следует ожидать, что числовые идентификаторы увеличатся в значении в соответствии с порядком создания сущностей. На практике это обычно, но не всегда.
Я только что нашел возможное (неэлегантное, ИМО) решение. После запроса и выборки сущностей переберите их в цикле и вручную добавьте параметр id:
query = Question.all()
questions = query.fetch(10)
# Add ID property :
for question in questions:
question.id = str(question.key().id())
Я не думаю, что это эффективно с точки зрения ЦП, но это работает как быстрое / грязное исправление.