Как написать динамически запрос 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())})
Вернуться на верх