0

Ich bin mir nicht sicher, wie genau das erreicht werden soll.Berechnete Eigenschaft für Google Datastore

Ich habe ein Modell definiert als

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 

Ich mag den Wert von concise_topics einzustellen (die auf dem gleichen Typ wie Themen ist) auf eine Teilmenge über get_important_topics Verfahren acheived. Dies sollte in dem Moment geschehen, in dem die topics-Eigenschaft festgelegt wurde.

Wie definiere ich die Eigenschaft "concise_topics" in der Post-Klasse?

Antwort

0

Mit der Klassenmethode haben Sie keinen Zugriff auf die Instanzwerte. Und auch sollten Sie nicht Anruf die Funktion, nur übergeben es an die berechnete Eigenschaft, und lassen Sie es selbst aufrufen.

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) 

Soweit ich die berechnete Eigenschaft erinnern wird auf jeder setzen Anruf, so dass Ihre Themen zu diesem Zeitpunkt schon da sein sollte.

+0

Ich bekomme jetzt ein neues Problem. –

+0

siehe http://stackoverflow.com/questions/39571299/badrequesterror-blob-enity-proto-or-text-property-concise-topics-must-be-in-a- –