假设我有一个HTML表单,如下所示:
<form ...>
Title: <input type=text name=title>
Account: <input type=text name=account>
<input type=submit value=search>
</form>
Google App引擎的NDB如下:
class Message(ndb.Model):
title = ndb.StringProperty()
account = ndb.StringProperty()
由于用户可能会或可能不会在字段中输入数据,因此搜索将实现为连续查询:
messages = Message.query()
if title:
messages = messages.query(Message.title==title)
if account:
messages = messages.query(Message.account==account)
上面的代码不起作用,因为“查询对象没有属性查询”
那么,我该如何执行连续查询?
答案 0 :(得分:1)
您是否阅读过ndb查询的文档? https://developers.google.com/appengine/docs/python/ndb/queries
它有一个很好的例子,可以在多个部分构建查询
qry1 = Account.query() # Retrieve all Account entitites
qry2 = qry1.filter(Account.userid >= 40) # Filter on userid >= 40
qry3 = qry2.filter(Account.userid < 50) # Filter on userid < 50 as well
在你的例子中,你会
messages = Message.query()
if title:
messages = messages.filter(Message.title==title)
if account:
messages = messages.filter(Message.account==account)
在问题中的代码中调用query()会创建一个新查询,而不是扩展它。
在文档中进一步阅读,您可以看到您也可以开始使用OR运算符在多个阶段构建查询。上面的例子意味着AND。
答案 1 :(得分:0)
摆脱messages = Message.query()
行,然后使用:
messages = Message.query(Message.title==title)