TIL 5주 4일차 인스타그램 클론코딩 프로젝트

노우석·2022년 10월 7일
0

실제 프로젝트 데이터를 받고 시험 구현한 기능 제대로 구현해보기

저번 검색기능을 실제 프로젝트 데이터를 받고 본격적인 구현을 해봐야한다.

우선 models.py 데이터베이스가 어떻게 다른지를 파악해야한다.

또한 이번 검색에는 tag를 검색해서 tag와 관련된 내용을 출력하려 하기 때문에 디테일하게 확인할 필요가 있다.

저번 모델과는 달라진 모습이 많다 하나씩 확인해보자

일단 Feed 클라스안에 tag라는 객체가 하나 더 생긴 걸 볼수가 있다 그리고 자세히 살펴보면

TaggableManger라는 django taggit 모듈을 사용하고 있다. TaggableManger는 tag를 작성하거나 어딘가에 집어넣을때 편하게 사용할 수 있도록

지원하는 기능을 하는데 문제는 이 모듈을 사용하게 되면 기존 Feed라는 데이터테이블이 아닌 새로운

테이블안에 tag정보가 담기게 되어 기존 search 함수를 사용할때 다른 테이블에 있는 tag정보를 가져와야만

검색할 수가 있다.

따라서 다른 테이블안에 정보를 검색하고 저장하기 위해선 외래키 참조 방식을 사용하면 되는데 그

참조기능을 모듈로 만들어 편하게 사용할 수 있게 한 모듈이 바로 위에 TaggedItemBase이다

저 모듈을 이용해서 Feed안에 있지만 다른 테이블에 저장되어 있는 tags라는 객체를 사용할 수 있게 새로운

class를 만들어 외래키 지정을 해주어 views 함수 안에서 tags객체 정보를 이용할 수 있게 만들어준다.

이제 models.py의 확인은 끝났고 함수를 수정할 차례이다. views.py안에 들어가서 함수를 작성하자

다음과 같은 함수를 작성해주면 되는데 해석하자면 우선 POST메서드로 온 검색 요청값을 q라는 변수안에 담아준다.

그리고 두번째줄은 query라는 변수안에 user_id , content, tags__name 객체들과 부분이라도 같은 정보들을 모두 담아준다는 코드이다. 저번 작성글에선 설명을 못했는데 앞에 Q를붙이고 |(빽 스페이스) 를 사용하는 문법은 '또는' 'OR'이라고 해석하면 된다.

따라서 닉네임 또는 게시글 또는 태그 이름에 관한 정보들을 query 안에 담는다라는 코드이다. 이렇게 담은 코드들을 searched라는 변수안에 fliter (분류) 해서 전부 담아주고 그 값을 마지막으로 결과값을 출력해내는 html로 보내주는 코드이다. 다만 여기서

중요한것은 tags 의 정보는 다른 테이블안에 담겨있기 때문에 문법을 조금 바꿔서 써줘야하는데 tags는 모델에 저장해준 객체 명이여서

tags라고 써주고 아래 하이푼을 두개 넣어줘서 tags__name이라는 다른 테이블안에 tags의 정보를 가져오는 문법을 사용해야한다.

profile
중요한건 버그에게 꺾이지 않는 마음

0개의 댓글