开发者

Unable to access ID property from a datastore entity

Using Google App Engine SDK and Python, I'm facing an issue : I'm unable to access the开发者_如何学Go ID property of a given entity properties. The only properties I can access are those defined in my class Model, plus the key property (see answer below) :

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

I can access text, answers, user, datetime and key properties just fine. However, I can't access the ID property. For example, after fetching all entities (using 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 }}

Any ideas ? Thanks !


According to the documentation, there is no id() instance method defined for Model subclasses.

Try {{ question.key }} instead.

Also note that the key is not created until the entity is saved to the datastore.


Edit: more info based on OP's edit:

Since we're really after the numeric ID, we could do something like this in our template:

{{ question.key.id }}

Another note: you should never expect numeric IDs to increase in value corresponding with the order of entity creation. In practice, this is usually—but not always—the case.


I just found a possible (inelegant, IMO) solution. After querying and fetching entities, loop through all of them and manually add the id parameter :

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

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

I don't think it's efficient CPU wise, but it works as a quick/dirty fix.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜