db.Key.from_path()不返回正确的密钥

时间:2012-02-16 17:34:16

标签: google-app-engine

我在代码中的几个不同位置使用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是无

2 个答案:

答案 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)