Google数据存储区的计算属性

时间:2016-09-19 10:09:33

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

我不确定如何实现这一点。

我有一个定义为

的模型
class Post(ndb.Model):
    author_key = ndb.KeyProperty(kind=Author)
    content = ndb.StringProperty(indexed=False)
    created = ndb.DateTimeProperty(auto_now_add=True)
    title = ndb.StringProperty(indexed=True)
    topics = ndb.StructuredProperty(Concept, repeated=True)
    concise_topics = ndb.ComputedProperty(get_important_topics())

    @classmethod
    def get_important_topics(cls):
        cls.concise_topics = filter(lambda x: x.occurrence > 2, cls.topics)
        return cls.concise_topics

我喜欢将concise_topics(与主题的类型相同)的值设置为通过get_important_topics方法实现的子集。这应该在主题属性设置的那一刻发生。

如何在Post类中定义“concise_topics”属性?

1 个答案:

答案 0 :(得分:0)

使用类方法,您无法访问实例值。而且你不应该调用函数,只有传递它到计算属性,并让它自己调用。

class Post(ndb.Model):
    author_key = ndb.KeyProperty(kind=Author)
    content = ndb.StringProperty(indexed=False)
    created = ndb.DateTimeProperty(auto_now_add=True)
    title = ndb.StringProperty(indexed=True)
    topics = ndb.StructuredProperty(Concept, repeated=True)

    def get_important_topics(self):
        return filter(lambda x: x.occurrence > 2, self.topics)

    concise_topics = ndb.ComputedProperty(get_important_topics)

据我记得,每次 put 调用都设置了计算属性,所以到那时你的主题应该已存在。