db.Key.from_path () не возвращает правильный ключ - PullRequest
0 голосов
/ 16 февраля 2012

Я использую 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)

моя модель отсутствует

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

вы не правильно строите путь со всеми предками.

root = Root().put()  
parent = Parent(key_name=parentname, parent=root).put()  
mymodel = MyModel(key_name=mymodelname, parent=parent).put()

Root -> не имеет родителей
Родитель -> имеет родительский Root
MyModel -> имеет родительский родительский

db.Key.from_path('Parent','parentname','MyModel','mymodelname')
этот скучает по корневому предку, который содержится в Родительском ключе

правильный ключ будет:

db.Key.from_path('MyModel', 'mymodelname', parent=parent)

и вот почему они создают ключ короче! один предок отсутствует.

1 голос
/ 17 февраля 2012

Похоже, есть два уровня предка, поэтому вы должны использовать это:

Key.from_path('Root', root.key().id(), 'Parent','parentname','MyModel','mymodelname')

или

Key.from_path('Parent','parentname','MyModel','mymodelname', parent=root)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...