我的问题是,创建新模型实体的最佳方式是什么,然后立即阅读它。例如,如何创建一个新的模型实体,然后立即读取它?
class LeftModel(ndb.Model):
name = ndb.StringProperty(default = "John")
date = ndb.DateTimeProperty(auto_now_add=True)
class RightModel(ndb.Model):
left_model = ndb.KeyProperty(kind=LeftModel)
interesting_fact = ndb.StringProperty(default = "Nothing")
def do_this(self):
# Create a new model entity
new_left = LeftModel()
new_left.name = "George"
new_left.put()
# Retrieve the entity just created
current_left = LeftModel.query().filter(LeftModel.name == "George").get()
# Create a new entity which references the entity just created and retrieved
new_right = RightModel()
new_right.left_model = current_left.key
new_right.interesting_fact = "Something"
new_right.put()
这往往会引发类似的异常:
AttributeError: 'NoneType' object has no attribute 'key'
即新的LeftModel实体的检索不成功。我用appengine几次遇到过这个问题,而且我的解决方案一直很有点冒险。通常我只是将所有内容都放在try或while循环中,直到成功检索到实体。我如何确保始终检索模型实体,而不会发生无限循环(在while循环的情况下)或弄乱我的代码(在try语句的情况下)?
只是在创建时为LeftModel设置了一个键,而不是使用自动生成的键。 – 2012-07-21 09:30:31
+1陈述问题 – msw 2012-07-21 12:25:14