我的查询有什么问题?
以下是我的模型:
class Positions(ndb.Model):
title = ndb.StringProperty(indexed=True)
summary = ndb.TextProperty()
duties = ndb.TextProperty()
dateCreated = ndb.DateTimeProperty(auto_now_add=True)
dateUpdated = ndb.DateTimeProperty(auto_now=True)
class Applicants(ndb.Model):
name = ndb.StringProperty(indexed=True)
position = ndb.KeyProperty(kind=Positions,repeated=True)
file = ndb.BlobKeyProperty()
dateCreated = ndb.DateTimeProperty(auto_now_add=True)
dateUpdated = ndb.DateTimeProperty(auto_now=True)
我的查询:
class AdminPositionInfoHandler(BaseHandler):
def get(self,positionKeyId):
user = users.get_current_user()
if users.is_current_user_admin():
positionKey = ndb.Key('Positions',int(positionKeyId))
position = positionKey.get()
applicants = Applicants.query(position=position.key).fetch() # the query
values = {
'position': position,
'applicants': applicants,
}
self.render_html('admin-position-info.html',values)
else:
self.redirect(users.create_login_url(self.request.uri))
使用查询
似乎是错误的applicants = Applicants.query(position=position.key).fetch()
File "C:xampphtdocsangelstouchmain.py", line 212, in get
applicants = Applicants.query(position=position.key).fetch()
...
TypeError: __init__() got an unexpected keyword argument 'position'
我也尝试使用positionKey
代替position.key
:
applicants = Applicants.query(position=positionKey).fetch()
我从GAE网站的"祖先查询"部分得到这个:
https://developers.google.com/appengine/docs/python/ndb/queries您不需要像这样传递参数到查询- ndb使用覆盖的相等/不相等操作符,因此您可以更"自然"地表达查询,使用'==','<', '>'等,因此:
applicants = Applicants.query(Applications.position==position.key).fetch()
关于按属性值过滤的部分给出了更多的例子。
(祖先是查询的特殊情况-它不是模型属性)