장고 - 해시태그 검색 기능 학습
- 이번 포스트에서는 객체마다 해시태그 생성(키워드 ‘,’로 구분)하여 특정 태그를 검색하는 방법에 대해 알아볼 것이다.
해시태그 생성 및 검색 방법
ex) yanolja_project
1. pip install django-taggit
2. settings.py에 ‘taggit’ 추가
- 경로 : yanolja_project > config(프로젝트) > settings.py
1
2
3
4INSTALLED_APPS = [
...
taggit,
]
3. migrate 진행
- 경로 : yanolja_project
1
$ python manage.py migrate
4. 모델 작성
- 경로 : yanolja_project
1
2
3
4from taggit.managers import TaggableManager
# 검색 관련 키워드 필드 정의
keywords = TaggableManager()
5. 변경사항 저장 및 migrate 진행
경로 : yanolja_project
1
2$ python manage.py makemigrations
$ python manage.py migrate해시태그 검색할 때 대소문자 구별하지 않을 것이라면 settings.py에 아래 내용 추가
1
2...
TAGGIT_CASE_INSENSITIVE = True
6. 관리자페이지에서 TAGGIT 추가된 것 확인
- 경로 : yanolja_project
1
2$ python manage.py createsuperuser
$ python manage.py runserver
7. 페이지 경로 설정했다고 가정하고, 뷰 페이지에 해시태그 검색기능 추가
- 경로 : yanolja_project > stay(앱) > views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16def stay_list(request):
if request.method == "POST":
# 프론트단으로부터 post method로 메인페이지 검색 데이터를 'keywords' 이름의 문자열 형태로 수신
keywords = request.POST.get('keywords', None)
if keywords is not None:
# 클라이언트로부터 전송받은 keywords 가 ','로 구분되어 있는 경우
# ','를 기준으로 키워드 분리하여 리스트 형태로 저장
keywords = keywords.split(',')
# 검색어 리스트에 있는 데이터가 Stay 객체의 keywords 필드 데이터에 존재하는 경우 해당 객체를 stays로 저장(동일 객체 중복 불가)
stays = Stay.objects.filter(keywords__name__in=keywords).distinct()
else:
# 클라이언트로부터 요청받은 데이터 key 값에 'keywords'가 존재하지 않는 경우
# 모든 숙소 객체를 stays로 저장
stays = Stay.objects.all()
return render(request, 'stay/stay_list.html', {'object_list':stays})
Posted