1

Правильный способ с использованием ndb.OR, как это:Как использовать ndb.OR в цикле?

q = News.query(ndb.OR(News.source == 'GRD', News.source == 'IND')) 

Какие результаты в OR-фильтра.

Запрос (вид = 'Новости', фильтры = ИЛИ (FilterNode ('источник', '=', 'ГЭРБ'), FilterNode ('источник', '=', 'IND')))

Но как это сделать в цикле?

Когда я пытаюсь это:

q = News.query() 
for source in sources: 
    q = q.filter(ndb.OR(News.source == source)) 

Это становится и фильтр:

запрос (вид = 'Новости', фильтры = AND (FilterNode ('источник', '=' 'GRD'), FilterNode ('источник', '=', 'IND')))

ответ

1

при повторном применении фильтров, как это, вы цепочки фильтров, каждый из фильтра фильтрование уже отфильтрованы р esults.

Для фильтрации по любому из ваших sources вы можете использовать IN. Цитируя the docs:

Аналогично, операция IN

property IN [value1, value2, ...] 

который проверяет членство в списке возможных значений, реализуется как

(property == value1) OR (property == value2) OR ... 

Так вы можете сделать:

qry = News.query(News.source.IN(sources)) 
+0

Спасибо, я думаю, что вы имели в виду 'д = News.query (ndb.OR (News.source.IN (источники)))' – Houman

+0

@Houman Сомневаюсь, OR нужно 2 параметра –

+0

@Houman 'в' является фактически реализованы как серия 'OR' (см. цитату выше!). – tx802

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