Q object를 활용한 필터링

Kim Chioh·2021년 2월 24일
0

1차 프로젝트 두번째 난관은 바로, 우리 프로젝트의 메인격인 간단한 서베이를 진행 후, 사용자의 전반적인 건강상태와 생활습관, 그리고 나이 성별 관심사 알러지 등 유저에게 적합한 알약을 추천해주는 일이였다.

멘토님들은 이 일이 데이터도 많아야하고 로직처리가 쉽지 않으니, 하드코딩을 권유하셨다. 하지만 우리 Team COOP은 완벽하진 않아도
1. 가짜데이터를 넣은 설문조사를 구현하여 아무 답이나 나오길 원하지 않았고
2. 설문 조사를 조금 간략화하고 & 질문끼리 서로 관련이 없는 독립적인 상태라면 우리가 로직을 구현할 수 있다고 생각했다

접근방법은 아래와 같다.
데이터구성
그래서 영양정보에 대한 배경지식이 있던 내가 실제로 데이터를 영양정보에 맞게 초기데이터를 세팅하였고, 답변에 따라 서로 겹치지 않는 속성값들을 부여하였고 이는 실제 서베이와 비슷하게 구성되었다.
질문을 db에 저장하지 않고 답변만을 받는다.
질문을 저장하지 않고 답만을 받는 이유는 다음과 같다.
1)질문은 데이터베이스에 저장할 필요가 없는 정보라 판단.
2)답만을 받아도 충분히 데이터베이스에 접근가능.
로직구현
로직을 구현하는 것은 하드코딩으로하면 질문이 늘어날 수록 수천가지의 가능성으로 뻗어나간다.예를들어 2가지 답변이 10개라면 2에 10승...
따라서 우리는 Q오브젝트를 임포트해서 데이터베이스에 접근하는 방법을 사용했다. Q오브젝트를 사용하면 다음과 같은 장점이 있다.
1) 실제 SQL 쿼리문을 사용한 join과 같은 커맨드를 장고에서 구현가능
2) 해당하는 정보를 제외하고 싶다면 ~을 사용하여 not을 포현하며 &를 사용하며 간단하게 and를 엮을 수도 있고, where조건을 단순하게 표현 할 수 있음!
3) filter().filter().....반복되는 코드를 줄일수있음
구현한 정보는 아래와 같습니다.
select * from Product where gender_code = gender_code and age_level = age_code and care_obesity = bmi and activity_level = activity_level and care_smoker = care_smoker
라는 복잡하고 어려운 sql쿼리문을 Q객체로 표현하여 아주 간단하고 재밌게 구현해봤습니다.

오늘도 잘배웠습니다!!

profile
Just do what to do

0개의 댓글