使用自身来计算其值的计算属性?

时间:2019-03-01 23:20:17

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

我想要一个可计算的属性来跟踪另一个属性的历史最大值。这两个属性都是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)

目的是在数字超过maximum_ever_number的情况下,将last_ever_number设置为新数字。

这无效,因为最初未设置highest_ever_number。我无法使用“ default = 0”将其设置为默认值。有解决方法吗?

谢谢

3 个答案:

答案 0 :(得分:0)

我认为您不能在计算属性内使用这些条件。整个功能可以在一个函数中完成,因此不必是ComputedProperty。解决此问题的更好方法是创建一个class method并在必要时调用它。

答案 1 :(得分:0)

应该使用普通的IntegerProperty,而不要使用计算的属性,而应使用_pre_put钩子(https://cloud.google.com/appengine/docs/standard/python/ndb/modelclass#hooks)来验证/更新maximum_ever_number。

答案 2 :(得分:0)

我现在无法对其进行测试,但这可以解决问题:

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)