UserModel.query ( self.login == 登录,self.name == 名称,祖先= 祖先键)
这是从GAE 数据存储中检索数据的Python语句。你能解释一下为什么我对祖先使用一个等号(=),而对其他属性使用两个等号(==)吗?
当我使用两个等号时,类似的语句self.login == login
应该返回一个布尔值,然后将其传递给函数。但这样不行,对吧?
UserModel.query ( self.login == 登录,self.name == 名称,祖先= 祖先键)
这是从GAE 数据存储中检索数据的Python语句。你能解释一下为什么我对祖先使用一个等号(=),而对其他属性使用两个等号(==)吗?
当我使用两个等号时,类似的语句self.login == login
应该返回一个布尔值,然后将其传递给函数。但这样不行,对吧?
对于您问题的第二部分:
python 允许您为一个类重载“等于”(以及小于和大于等)(并且您可以让它返回任何内容,而不仅仅是真/假),而 ndb 已经为 Properties 完成了返回查询过滤节点。检查来源:https ://code.google.com/p/appengine-ndb-experiment/source/browse/ndb/model.py#858
您正在将比较与作业混为一谈。
请参阅文档https://developers.google.com/appengine/docs/python/ndb/queries#filter_by_prop
为这种 Kind 创建查询对象的工厂接受一个祖先参数,该参数定义给定祖先的查询范围。它还接受许多定义过滤器的表达式。的用途self.login == login
是定义过滤器的表达式。
我不明白你问题的最后一部分。
定义查询的另一种方法是
UserModel.query(ancestor=ancestor_key).filter(self.login==login)
在 query() 中提供过滤器的能力只是这种形式的捷径。