[英]How can I make a repeated ndb.ComputedProperty in Python App Engine?
我有一个NDB模型:
class MyModel(ndb.Model):
foo = ndb.KeyProperty(repeated=True)
bar = ndb.KeyProperty(repeated=True)
# This doesn't work
baz = ndb.ComputedProperty(lambda self: self.foo + self.bar, repeated=True)
我想查询既不在foo中也不在bar中的键:
query = MyModel.query().filter(MyModel.foo != my_key).filter(MyModel.bar != my_key)
但是,这不起作用,因为您只能有一个不等式过滤器 。
这样,我添加了计算属性baz,以便可以查询MyModel.baz != my_key
。 但是,这也不起作用。 如果我忽略其中的repeat = True部分,那么每次放置模型时都会引发异常,因为无法重复列出非重复属性。
如果baz是重复属性,则它将失败,并出现ComputedPropertyError: Cannot assign to a ComputedProperty
。 即使我将lambda简化为lambda lambda self: [1, 2]
,即使我在获取值后立即执行了一次卖出操作(不进行任何更改),也总是会因此错误而失败。
我可以只使用带有预放置钩子的常规属性:
baz2 = ndb.KeyProperty(repeated=True)
def _pre_put_hook(self):
self.baz2 = self.foo + self.bar
但似乎我应该只能使用ComputedProperty。
为什么不能重复计算ComputeProperty? 有没有更好的方法来做我想做的事?
谢谢!
我发现了问题。 显然,我覆盖了put并使用了put(** my_model._to_dict()),它的作用是尝试为计算的属性分配某些内容。
换句话说,一切都按预期工作,除非您执行复杂的工作,否则重复计算的属性可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.