【问题标题】:Google App Engine NDB repeated property additional infoGoogle App Engine NDB 重复属性附加信息
【发布时间】:2012-08-18 12:51:52
【问题描述】:

例如:我有一个带有重复“标题”属性的文章模型,该属性存储原始标题的不同语言的翻译:

class Article(ndb.Model):
  title = ndb.StringProperty(repeated=True)

除了title属性外,我如何存储标题的语言代码,这样我就可以获得标题的特定版本,如下所示:

en_title = article.title['en']

具有相同的属性名称很重要,因为我不知道将使用哪种语言查询文章标题。

【问题讨论】:

    标签: google-app-engine python-2.7 app-engine-ndb


    【解决方案1】:

    你可以使用重复结构属性:

    class Title(ndb.Model):
      title = ndb.StringProperty()
      lang = ndb.StringProperty()
    
    class Article(ndb.Model):
      titles = ndb.StructuredProperty(Title, repeated=True)
    

    【讨论】:

    • 我怎样才能得到特定语言的标题?
    • @andrei 问题的标题有点误导,但如果你需要一个字典,那么只需按照 Guido 的建议使用 PicklePropety 或 JsonProperty。
    • 对不起标题,我不知道该怎么称呼它。我仍然不知道如何解决这个问题。如果我按照您的建议存储标题,我可以通过标题有效地查询,但我无法在实例上按语言获取特定标题。但是,据我所知,如果我将标题存储为 PicklePropety 或 JsonProperty,则 dict 将作为 blob 存储在数据存储中,并且我敢打赌查询会慢得多(也就是说,如果我可以按标题查询,因为它是dict我不需要用dict键查询吗?哪个是语言代码)
    【解决方案2】:

    您要查询标题或语言吗?如果没有,您可以使用 PickleProperty 或 JsonProperty 来存储字典。

    【讨论】:

    • 是的,查询 title 属性非常重要,而且所有翻译的标题必须具有相同的属性名称,因为我不知道用户将使用哪种语言查询。我想我会使用 StructuredProperty 并弄清楚如何通过语言代码获得特定的标题。不过感谢您的回答!
    • 只需编写一个查找函数,该函数接受一个 Title 对象列表和一种语言,并返回该语言的标题(可能也添加一个默认语言)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多