Вычисляемое свойство, которое использует себя для вычисления своей стоимости? - PullRequest
0 голосов
/ 02 марта 2019

Я хочу иметь вычисляемое свойство, которое отслеживает этот исторический максимум другого свойства.Оба эти атрибута являются членами класса ndb.

Мой наивный подход заключался в следующем:

number = ndb.IntegerProperty(default=0)
highest_ever_number = ndb.ComputedProperty(lambda self: self.highest_ever_number if self.highest_ever_number >= self.number else self.number)

Намерение состояло в том, чтобы установить на самый высокий_в_номер число, если число когда-либо превосходило наивысший_всегда_номер.

Это не работает, потому чтоЯ не могу установить значение по умолчанию, используя «default = 0».Есть ли обходной путь к этому?

Спасибо

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Вместо использования вычисляемого свойства вы должны использовать обычное свойство IntegerProperty, но использовать ловушку _pre_put (https://cloud.google.com/appengine/docs/standard/python/ndb/modelclass#hooks) для проверки / обновления наивысшего_вс_ номера.

0 голосов
/ 16 мая 2019

Я не могу проверить это прямо сейчас, но это может помочь:

number = ndb.IntegerProperty(default=0)
highest_ever_number = ndb.ComputedProperty(lambda self: self.highest_ever_number if 
self.highest_ever_number and self.highest_ever_number >= self.number else self.number)
0 голосов
/ 02 марта 2019

Я не думаю, что вы можете использовать такие условия внутри компьютерной собственности.Вся эта функциональность может быть реализована внутри функции, поэтому она не должна быть ComputedProperty.Лучшей альтернативой этой проблеме может быть создание class method и вызов его при необходимости.

...