我尝试使用键来解决重复的属性元素,例如: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',chapter = ['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无效。我可以使用钩子或属性子类来使其工作吗?
为了使它工作,我可以将有效的Book 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()
关于我的例子和密钥的使用:
我在Dependencies中使用键,因为依赖项中的键可以引用不同的类型。这些类型与书类似,因为它们没有像Book章节这样的重复属性。我在我的应用程序中使用重复的depends_on_keys而不是chapter_keys。
在示例中,我也省略了父键。像类似的书可以有依赖关系,但在我的应用程序中,你找不到实体,这些实体依赖于本书。
答案 0 :(得分:2)
不,您不能使用密钥来识别实体的一部分。如果要引用实体的一部分,则需要将一个键与您自己的方案结合使用以解决实体参数。
答案 1 :(得分:1)
我很好奇,因为上面的代码似乎在语法术语中是正确的:
tag_keys = [ndb.Key('Tags', 'python', ndb.Key('Tags', 'java']
你可以使用下面的代码,它对我有用:
class SomeModel(ndb.Model):
pass
class WithKeys(ndb.Model):
keys=ndb.KeyProperty(SomeModel,repeated=True)
keys=[ndb.Key(SomeModel,i) for i in range(1,10)]
with_keys=WithKeys(keys=keys)
print with_keys.keys
打印:
[Key('SomeModel', 1), Key('SomeModel', 2), Key('SomeModel', 3), Key('SomeModel', 4), Key('SomeModel', 5), Key('SomeModel', 6), Key('SomeModel', 7), Key('SomeModel', 8), Key('SomeModel', 9)]
Goog运气