在 NDB Python 中查询布尔值 属性

Query a boolean property in NDB Python

我有一个 Greeting 模型

class Greeting(ndb.Model):
    author = ndb.StructuredProperty(Author)
    content = ndb.TextProperty(indexed=False)
    avatar = ndb.BlobProperty()
    date = ndb.DateTimeProperty(auto_now_add=True)
    public = ndb.BooleanProperty(default=False)

其中我使用以下代码在 Python Google App Engine 的每个页面上查询七个问候帖子:

posts_query = Greeting.query(
ancestor=session_key(session_name)).order(-Greeting.date)
curs = Cursor(urlsafe=self.request.get('cursor'))
posts,next_curs, more = posts_query.fetch_page(7, start_cursor=curs)

我希望它只显示 public 修改为 True 的帖子,所以我将其更改为

posts_query = Greeting.query(
ancestor=session_key(session_name), Greeting.public == True).order(-Greeting.date) #line changed
curs = Cursor(urlsafe=self.request.get('cursor'))
posts,next_curs, more = posts_query.fetch_page(7, start_cursor=curs)

但是,它给我一个错误:

File "/home/ralf/Desktop/google_projects/website/views/events.py", line 28
    Greeting.public == True).order(-Greeting.date)
SyntaxError: non-keyword arg after keyword arg

我该如何解决这个问题?这种查询的合适代码是什么?非常感谢帮助。

P.S。如您所见,我也在使用查询游标。

我用这个

修复了它
posts_query = Greeting.query(Greeting.public == True).order(-Greeting.date)

而不是

posts_query = Greeting.query(ancestor=session_key(session_name),
        Greeting.public == True).order(-Greeting.date)

是的,颠倒查询函数中 ancestor=session_key(session_name)Greeting.public == True 的顺序可以消除错误。但是,我发现我的答案是一个很好的解决方案,因为它是我在网站中添加的功能的一部分。

ancestor=session_key(session_name) 对于 public 应用程序用户根本不需要。他们只是查看页面,根本没有登录。

假设您有一些包含位置参数和非位置参数的复杂查询并且它变得令人困惑,您也可以将其分成两行:

posts_query = Greeting.query(ancestor=session_key(session_name))
posts_query = posts_query.filter(Greeting.public == True)

这个'filter building'可以根据需要重复多次。