장고:검색기능
장고! 웹 프레임워크! 틀:장고
개요
검색기능은 DB에 쿼리하는 방식으로 이루어진다.
view 수정
목록을 조회하는 view를 수정한다.
from django.db.models improt Q # or조건으로 데이터를 조회하기 위한 함수(장고제공)
keyword = request.GET.get('keyword', '') # 검색어를 get으로 가져온다. ''는 왜 필요할까? 없어도 되나?
if keyword:
question_list = question_list.filter(
Q(subject__icontains=keyword)| # question모델의 subject에서 검색.
Q(content__icontains=keyword)| # question모델의 content에서 검색.
Q(author__username__icontains=keyword)| # question모델의 상위인 user모델의 username에서 검색.
Q(answer__author__username__icontains=keyword) # 하위모델인 answer모델의 참조인 user모델의 username에서 검색.
).distinct() # 중복이 있는 경우, 이를 제거하고 리턴해주는 함수.
POST방식이 아니라 GET으로 받아오는 것은 뒤로가기 버튼을 누를 때 '만료된 페이지입니다'라는 문구가 뜨기 때문이다. 그럼 다시 찾아들어가야 하고.. 불편해.
('만료된 페이지입니다' 문구는 POST요청 시 중복요청을 방지하기 위해 발생시키는 오류이다.)