我在代码中的几个不同位置使用db.Key.from_path(Model,key_name),然后调用db.get()或Model.get_by_key_name()。我注意到这些后面的命令总是返回0项,即使我知道我应该得到回来的东西。仔细检查后,我注意到db.Key.from_path()命令没有返回正确的密钥。返回的密钥看起来非常相似,特别是在开头时,但有些字符不同,比数据存储区查看器中显示的密钥短约75%。有人遇到过这种情况么?感谢。
以下是一些示例代码:
class Root(db.Model):
pass
class Parent(db.Model):
pass
class MyModel(db.Model):
pass
root = Root().put()
parent = Parent(key_name=parentname,parent=root).put()
mymodel = MyModel(key_name=mymodelname,parent=parent).put()
mymodel_k = db.Key.from_path('Parent','parentname','MyModel','mymodelname')
mymodel = db.get(mymodel_k)
mymodel是无
答案 0 :(得分:2)
你没有正确地与所有祖先一起构建路径。
root = Root().put()
parent = Parent(key_name=parentname, parent=root).put()
mymodel = MyModel(key_name=mymodelname, parent=parent).put()
Root - >没有父母 家长 - >有父根 MyModel - >有父母的父母
db.Key.from_path('Parent','parentname','MyModel','mymodelname')
这个错过了包含在父键中的Root祖先。
右键是:
db.Key.from_path('MyModel', 'mymodelname', parent=parent)
这就是为什么他们创造的关键更短!一个祖先失踪了。
答案 1 :(得分:1)
看起来有两个祖先级别,所以你应该使用它:
Key.from_path('Root', root.key().id(), 'Parent','parentname','MyModel','mymodelname')
或
Key.from_path('Parent','parentname','MyModel','mymodelname', parent=root)