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) 

這種「過濾器建設」可以重複多次有必要的。