0

我有一个Greeting模型查询在NDB Python中的布尔属性

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的谷歌应用程序引擎的每个页面来查询7个问候帖子:

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) 

我希望它只显示公开修改为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.正如你所看到的,我也在使用查询光标。

+2

我不知道这个问题必然涉及到App Engine。 Python在关键字参数后不允许非关键字参数(位置)。在关键字参数“ancestor = session_key(session_name)”后面有一个位置参数“Greeting.content ==”test8“”,所以它不是有效的python。 – dyeray

+0

@dyeray对不起,我要编辑我的问题。这不是现在显示的错误行。 –

+0

@dyeray现在它已经更新。 :) –

回答

-1

我用这个

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)。他们只是查看页面,根本不登录。

0

假设您有相关的位置和非位置参数一些复杂的查询,它是越来越混乱,你也可以把它分成两行:

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

这种“过滤器建设”可以重复多次有必要的。