Как написать динамически запрос query с "ИЛИ" и условием?
Реализую фильтрацию записей из Elasticsearch, я использую чекбоксы из формы для поиска.
В постзапросе передается словарь со значениями из формыsearch = request.POST.dict()
Затем нужно проверить есть ли конкретное значение в словареif "max_date" in search:
и после этого уже формировать запрос queries.append(Q('range', DateRecord={'lte': search['max_date']}))
Проблема в том, что по match ищется совпадение только с одним значением, мне нужно, чтобы динамически при условии добавлялось "ИЛИ" как здесь queries.append(Q('match',LevelRecord = 'warning')|Q('match',LevelRecord = 'error'))
Представление:
class Index(PermissionRequiredMixin, View):
serializer_class = TjournalSerializer
document_class = TjournalDocument
permission_required = 'blog.view_tjournal'
login_url = reverse_lazy('login')
success_url = reverse_lazy('home')
def post(self, request):
queries = []
search = request.POST.dict()
if "min_date" in search:
if search['min_date']:
queries.append(Q(
'range',
DateRecord={'gte': search['min_date']}))
if "max_date" in search:
if search['max_date']:
queries.append(Q(
'range',
DateRecord={'lte': search['max_date']}))
if "levelError" in search:
queries.append(Q(
'match',
LevelRecord = 'error'))
if "levelWarning" in search:
queries.append(Q(
'match',
LevelRecord = 'warning'))
if "levelInfo" in search:
queries.append(Q(
'match',
LevelRecord = 'information'))
if"levelNote" in search:
queries.append(Q(
'match',
LevelRecord = 'note'))
if queries:
journals = self.document_class.search().query(reduce(operator.iand, queries))
serializer = self.serializer_class(journals, many=True)
return render(request,"show.html",{'journals':serializer.data})
else:
return render(request,"show.html",{'journals':list(self.document_class.search())})