условное включение запросов в расширенный запрос в zope

Я создаю довольно тщательный механизм поиска для сайта zope. Существует множество различных способов поиска, и, поскольку он может захотеть найти несколько значений в одном и том же индексе (и сопоставить их все), мне нужно сделать это с помощью AdvanceQuery. Я построил свои запросы следующим образом:

if self.text():
    text_query = And()
    for t in self.text():
        text_query.addSubquery(Eq('SearchableText',t))
if self.sector()
    sector_query = And()
    for s in self.sector()
        sector_query.addSubquery(Eq('sector',s))
if self.region():
    region_query = Eq('region',self.region())
if self.role():
    role_query = Eq('role',self.role())

self.text() и т. д. определены в другом месте и вернут False, если запрос не существует, а self.text() и self.sector() всегда создают список, даже если есть только одно значение, так что не беспокойтесь. .

Я также знаю, как сделать последний бит, например.

return self.context.portal_catalog.evalAdvancedQuery(query)

Чего я не могу понять, так это того, как сшить его вместе, чтобы определить «запрос». Если я сделаю что-то подобное, это сломается, если не все из них присутствуют:

query = text_query & sector_query & region_query & role_query

Имейте в виду, что это, вероятно, не полный список переменных для поиска, поэтому мы рассматриваем сотни возможных комбинаций. Как я могу условно определить «запрос», чтобы он не сломался?


person chrism    schedule 09.07.2010    source источник
comment
Очевидно, плохо сформулированный вопрос - однако я понял это, в ifs я использую &=, чтобы добавить его в уже инициализированный запрос   -  person chrism    schedule 09.07.2010


Ответы (1)


Как я уже сказал в комментарии, использование &= в операторе if, похоже, помогает.

person chrism    schedule 09.07.2010