get_by_id () не будет возвращать экземпляр модели - PullRequest
3 голосов
/ 19 июня 2010

У меня есть модель с именем Version, которая выглядит следующим образом:

from google.appengine.ext import db
import piece

class Version(db.Model):
    "A particular version of a piece of writing."

    parent_piece = db.ReferenceProperty(piece.Piece, collection_name='versions')
    "The Piece to which this version belongs."

    note = db.TextProperty()
    "A note from the Author about this version."

    content = db.TextProperty()
    "The actual content of this version of the Piece."

    published_on = db.DateProperty(auto_now_add=True)
    "The date on which the version was published."

Я хотел бы получить доступ к экземплярам Version через их идентификаторы, используя Version.get_by_id (), но этот вызов всегда возвращает None .В средстве просмотра хранилища данных я вижу, что у них есть значения идентификаторов, а в отладчике я могу запрашивать их, но не использовать их:

>>> for each_ver in version.Version.all():
...  print each_ver.key().id()
... 
34
35
36
31
32
>>> a = version.Version.get_by_id(34)
>>> type(a)
<type 'NoneType'>

Я вижу, что здесь есть много вопросов, где люди могутэффективно использовать get_by_id () так, как я хочу, и они не видят результатов, которые я вижу.

Может быть проблема в том, что каждый экземпляр Version является дочерним в группе сущностейа не корень группы сущностей?Каждая версия живет в группе объектов, которая выглядит как Member-> Piece-> Version.Если это проблема, есть ли способ, которым я могу ссылаться на сущность версии, не используя весь ее ключ?Если это не проблема, может кто-нибудь сказать мне, что я могу сделать, чтобы get_by_id () работал как положено?

Ответы [ 2 ]

6 голосов
/ 19 июня 2010

Может быть проблема в том, что каждая версия экземпляр является дочерним в группе сущностей а не корень группы сущностей?

Да. Ключ сущности включает в себя ключи любых родительских сущностей.

Если это проблема, есть ли так, что я могу сослаться на версию лица без использования всего его ключа?

Нет. Сущность уникально идентифицируется только по всему ее ключу, который включает в себя ключи всех родительских сущностей. Однако если вы знаете виды его родительских объектов, вы можете использовать db.Key.from_path для создания ключа из цепочки идентификаторов или имен ключей.

0 голосов
/ 20 января 2015

У меня была та же проблема, но в ndb.Model, и я обнаружил, что мне нужно преобразовать ID в intПоэтому, возможно, использование version.Version.get_by_id(int(34)) может решить вашу проблему.

...