0

У меня есть поздравительная модельQuery булево свойства в НБДЕ 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 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) 

I хотел, чтобы он показывал только сообщения, которые имеют общественное изменение в 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 не разрешает аргументы non keyword (positional) после аргументов ключевого слова. У вас есть позиционный аргумент «Greeting.content ==» test8 "" после аргумента ключевого слова "ancestor = session_key (session_name)", поэтому он недействителен 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) 

Этот «фильтр здания» может быть повторен столько раз, как надо.

Смежные вопросы