I think the brand query should be something like
if brand:
brand_queries = (q.ilike(f"%{a}%") for a in brand)
queries.append(
q.any_of(brand=q.any_of(*brand_queries))
)
I think you can also simplify the query code somewhat, maybe something like:
from collections import defaultdict
@anvil.server.callable
def search_table(query=None, brand=None, country=None, language=None, from_date=None, to_date=None):
queries = defaultdict(list)
if query:
query = q.ilike(f"%{query}%")
queries["subject"].append(query)
queries["brand"].append(query)
queries["country"].append(query)
queries["language"].append(query)
if brand:
queries["brand"].extend(q.ilike(f"%{a}%") for a in brand)
if country:
queries["country"].append(q.ilike(f'%{country}%'))
if language:
queries["language"].append(q.ilike(f'%{language}%'))
queries = {col: q.any_of(*query_list) for col, query_list in queries.items()}
# handle dates
if from_date and to_date:
queries["email_date"] = q.between(from_date, to_date)
elif from_date:
queries["email_date"] = q.greater_than_or_equal_to(from_date)
elif to_date:
queries["email_date"] = q.less_than_or_equal_to(to_date)
result = app_tables.email.search(**queries)
return result