【发布时间】:2013-01-16 15:59:09
【问题描述】:
我尝试使用键来处理重复的属性元素,例如:ndb.Key('Books', 'Programming.one') 但此键(.one 部分)无效。
下面的示例模型是我的应用模型的简化版本。在这个示例代码中,我在书籍章节和标签之间有依赖关系(使用键):
class Tags(ndb.Model):
tag = ndb.StringProperty()
示例:标签(id = 'python', tag = 'python')
class Books(ndb.Model):
book = ndb.StringProperty)
chapters = ndb.StringProperty(repeated = True)
示例:书籍(id = 'Programming', book = 'Programming', chapters = ['one', 'two'])
class Dependencies(ndb.Model):
chapter_key = ndb.KeyProperty()
tag_keys = ndb.KeyProperty(repeated = True)
例子:
chapter_key = ndb.Key('Books','Programming.one')
dependency_key = ndb.Key('Dependencies', chapter_key.id())
Dependencies(key = dependency_key, chapter_key = chapter_key,
tag_keys = [ndb.Key('Tags', 'python'), ndb.Key('Tags', 'java')])
是否可以使用 ndb.Key 来处理重复的属性。在我的代码示例中,chapter_key 无效。我可以使用钩子或属性子类使其工作吗?
为了使它工作,我可以将有效的书本密钥与 StringProperty 结合起来保存章节。
book_key = ndb.Key('Books','Programming')
chapter = 'one'
dependency_key = ndb.Key('Dependencies', book_key.id() + '.' + chapter)
Dependencies(key = dependency_key, book_key = book_key, chapter = chapter,
tag_keys = [ndb.Key('Tags', 'python'), ndb.Key('Tags', 'java')])
但我想从钥匙中受益。
我对结构化属性有同样的问题。对于这个问题,重复的 StringProperty 章节被重复的 StructuredProperty 替换,例如:
class Chapters(ndb.Model):
chapter = ndb.StringProperty()
word_count = ndb.IntegerProperty()
关于我的例子和按键的使用:
我在依赖项中使用键,因为依赖项中的键可以引用不同的类型。这些种类不同于 Book like 种类,因为它们没有像 Book chapters 这样的重复属性。我在我的应用程序中使用重复的depends_on_keys,而不是chapter_keys。
在示例中,我还省略了父键。 Book like kind 可以有依赖关系,但在我的应用程序中,您找不到实体,这些实体依赖于 Book like kind。
【问题讨论】:
-
你能提供一个堆栈跟踪吗?所有这些东西都应该起作用。
-
当我在数据存储查看器中按 owner_key 时出现错误。 docs.google.com/file/d/0B9-mEcXX8BPaWW9uc3FVaExwdHM/edit
标签: google-app-engine python-2.7 app-engine-ndb