首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是否可以使用ndb.key处理重复属性或结构化属性

我是否可以使用ndb.key处理重复属性或结构化属性
EN

Stack Overflow用户
提问于 2013-01-16 23:59:10
回答 2查看 1.1K关注 0票数 2

我尝试使用键来处理重复的属性元素,比如: ndb.Key('Books','Programming.one'),但是这个键( .one部分)无效。

我下面的示例模型是我的应用程序模型的简化版本。在这个示例代码中,我在书中的章节和标签之间有依赖关系(使用键):

代码语言:javascript
复制
class Tags(ndb.Model):
    tag = ndb.StringProperty()

示例:标签(id= 'python',tag = 'python')

代码语言:javascript
复制
class Books(ndb.Model):
    book = ndb.StringProperty)
    chapters = ndb.StringProperty(repeated = True)

示例: book (id= 'Programming',book= 'Programming',chapters = 'one','two')

代码语言:javascript
复制
class Dependencies(ndb.Model):
    chapter_key = ndb.KeyProperty()
    tag_keys = ndb.KeyProperty(repeated = True)

示例:

代码语言:javascript
复制
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来保存章节。

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
class Chapters(ndb.Model):
    chapter = ndb.StringProperty()
    word_count = ndb.IntegerProperty()

关于我的例子和键的用法:

我在依赖项中使用键,因为依赖项中的键可以引用不同的类型。我在应用程序中使用重复的depends_on_keys,而不是chapter_keys。

在这个例子中,我还省略了父键。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-17 20:17:09

不能,您不能使用密钥来标识实体的一部分。如果要引用实体的一部分,则需要结合使用键和您自己的方案来寻址实体参数。

票数 2
EN

Stack Overflow用户

发布于 2013-01-17 06:00:51

我很好奇,因为上面的代码在中国似乎不正确:

代码语言:javascript
复制
tag_keys = [ndb.Key('Tags', 'python', ndb.Key('Tags', 'java']

你可以使用下面的代码,它对我很有效:

代码语言:javascript
复制
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

它打印:

代码语言:javascript
复制
[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)]

祝你好运

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14362504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档