장고 - 해시태그 검색 기능 학습

  • 이번 포스트에서는 객체마다 해시태그 생성(키워드 ‘,’로 구분)하여 특정 태그를 검색하는 방법에 대해 알아볼 것이다.

해시태그 생성 및 검색 방법

ex) yanolja_project

1. pip install django-taggit

2. settings.py에 ‘taggit’ 추가

  • 경로 : yanolja_project > config(프로젝트) > settings.py
    1
    2
    3
    4
    INSTALLED_APPS = [
    ...
    taggit,
    ]

3. migrate 진행

  • 경로 : yanolja_project
    1
    $ python manage.py migrate

4. 모델 작성

  • 경로 : yanolja_project
    1
    2
    3
    4
    from 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
    16
    def 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})