我有一个 User ndb.Model ,它的用户名 StringProperty 允许大写和小写字母,在某些时候我想通过用户名获取用户,但为了过滤而强制将大小写为小写。因此,我向 User: username_lower 添加了一个 ComputedProperty,它返回用户名的小写版本,如下所示:
@ndb.ComputedProperty
def username_lower(self):
return self.username.lower()
然后我像这样过滤查询:
query = query.filter(User.username_lower==username_input.lower())
这有效,但是它仅适用于我将其添加到模型后创建(放置)的用户。之前创建的用户不会被此查询过滤。我首先认为 ComputedProperty 不适用于老用户。但是,尝试过这个并在老用户上调用 .username_lower 确实有效。
最后,我找到了一个解决方案是获取所有用户并运行 .put_multi(all_users)
因此,当您直接调用它但最初不过滤时,似乎稍后添加到模型中的 ComputedProperty 可以工作。它不会自动索引吗?或者它可能是一个缓存的东西..?
任何关于它为什么会这样表现的见解都将受到欢迎
谢谢