Вы в основном запрашиваете оператор ИЛИ, что невозможно сделать с одним запросом. Я думаю, у вас есть два варианта:
1) Добавьте оператор ИЛИ, создав подкласс MultiQuery. Это все еще выполнит несколько запросов под капотом, и упорядочивание и курсоры не будут работать.
2) Предварительно вычислите все возможные комбинации ваших трех свойств, поместите их в StringListProperty, а затем используйте оператор IN. Например, ваша модель будет выглядеть следующим образом:
m.col_age_name = ['c:blue, a:22', 'c:blue, n:Tom', \
'a:22, n:Tom', 'a:22, c:blue, n:Tom']
Затем вы запускаете фильтр:
q.filter('col_age_name IN', ['c:blue, a:22', 'c:blue, n:Tom', 'a:22, n:Tom'])
У этого решения есть проблемы: (a) оно выполняет несколько запросов изнутри, (b) вам нужно запустить его три раза (один раз для 1, 2 и 3 свойств), (c) оно не будет поддерживать порядок или курсоры, и (г) это делает управление данными беспорядок. Единственное преимущество заключается в том, что оно уменьшает максимальное количество вызовов фильтра, которое вам нужно сделать, с 7 до 3.
Это явно больше хлопот, чем стоит. Я бы просто выполнил простой запрос семь раз, у которого есть недостатки (a) и (c), но нет (d).