我想要一个可计算的属性来跟踪另一个属性的历史最大值。这两个属性都是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”将其设置为默认值。有解决方法吗?
谢谢
答案 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)