점프투플라스크 검색 관련 질문

안녕하세요 점프투플라스크 책을 읽으면서 플라스크 게시판 프로젝트를 완성했습니다.
추가적인 기능 개발을 위해 따로 기능 추가를 해보고 있는데요.
검색을 한 후, 밑에 AND OR NOT을 넣어 첫 검색어가 A라고 가정후 추가 검색어가 B일때, * A AND B * A OR B * A (NOT B)
검색을 라디오 버튼과 새로운 검색바를 넣어 시도해보려고 합니다.
현재 라디오 버튼과 검색바를 띄우는 것은 완성하였고, 해당 기능을 부여하기 위해 kw2(추가검색어)를 추가하여 시도 하고 있고,
기존 검색기능을 조금 변형해서 해당 Query를 만들려고 하는데 현재 어려움을 겪고 있습니다.

question_list.html과 question_views.py 두 파일에서 추가 작업중이며,
기존 검색 바 아래에 새롭게 라디오 버튼과 검색창을 만들었습니다.
페이징처리 끝부분에 kw2가 파라미터로 제대로 들어오는지 확인하기 위해 히든 타입을 넣어서 확인해보니, 들어오지 않아,
최하단 자바스크립트 부분에도 따로 btn_search2.addEventListener('click', function() {} 을 만들어 kw, kw2, page searchform submit 생성하였고, 라디오 버튼을 처리하면서 POST로 받아서 파이썬 파일로 검색을 처리해볼려고 했습니다.
다만 계속 제자리 걸음을 하는거 같아 질문 남겨봅니다.

question_list.html 새로 만든 부분

<div class="col-8"></div>
        <div class="col-4 ml-auto">
            <form action="" method="POST">
                <label class="radio-inline control-label" for="andOption">
                    <input class="form-check-input" type="radio" name="queryOption" id="andOption" value="AND">
                    And
                </label>
                <label class="radio-inline control-label" for="orOption">
                    <input class="form-check-input" type="radio" name="queryOption" id="orOption" value="OR">
                    Or
                </label>
                <label class="radio-inline control-label" for="notOption">
                    <input class="form-check-input" type="radio" name="queryOption" id="notOption" value="NOT">
                    Not
                </label>
                <div class="input-group">
                    <input type="text" id="search_kw2" placeholder="추가 검색어" class="form-control" value="{{ kw2 or '' }}" value onkeypress="return search2(event)"/>
                    <div class="input-group-append">
                        <button class="btn btn-outline-secondary" type="submit button" id="btn_search2" name="extra_search">
                            <i class="fas fa-search"></i>
                        </button>
                    </div>
                </div>
            </form>
        </div>

question_view.py def _list() 함수 아래 추가사항 - (& 를 저렇게 넣으면 OR연산이 되는데, 실험차 넣어봤습니다,)

#And, Or, Not 연산하기
    if request.method == "POST":
        if "extra_search" in request.form:
            option = request.args.get('queryOption', type=str, default='')
            if option == "AND" and kw2:
                search1 = '%%{}%%'.format(kw)
                search2 = '%%{}%%'.format(kw2)
                sub_query = db.session.query(Answer.question_id, Answer.content, User.username) \
                    .join(User, Answer.user_id == User.id).subquery()
                question_list = question_list \
                    .join(User).outerjoin(sub_query, sub_query.c.question_id == Question.id).filter(
                        Question.subject.ilike(search1) & Question.subject.ilike(search2) |  # 질문제목
                        Question.content.ilike(search1) & Question.content.ilike(search2) |  # 질문내용
                        User.username.ilike(search1) & User.username.ilike(search2) |  # 질문작성자
                        sub_query.c.content.ilike(search1) & sub_query.c.content.ilike(search2) |  # 답변내용
                        sub_query.c.username.ilike(search1) & sub_query.c.username.ilike(search2)  # 답변작성자
                    ) \
                .distinct()

toboy93 350

2022년 10월 6일 4:59 오후

and_, or_ 함수를 사용해 보세요. https://docs.sqlalchemy.org/en/14/core/sqlelement.html - 박응용님, 2022년 10월 6일 5:45 오후 추천 , 대댓글
@박응용님 감사합니다. 해당 부분 참고해서 잘 해결했습니다. - toboy93님, 2022년 10월 7일 1:12 오후 추천 , 대댓글
목록으로