[django] Url 다중 파라미터 값과 쿼리셋 필터링

송민준·2023년 5월 29일
0

출그니 (캡스톤)

목록 보기
6/6

피드의 구성요소 중 해시태그가 있습니다. 해시태그를 통한 필터링을 구현하여 원하는 호선의 피드를 볼 수 있도록 하려고 합니다.

다음은 serializer에 데이터를 넘기기 전에 어떤 인스턴스를 넘겨줄지 정하는 함수 get_queryset입니다. 해시태그 여러개를 받아 그 해시태그를 가진 피드만 queryset에 남깁니다.

def get_queryset

def get_queryset(self):
    queryset = Feed.objects.all()
    ...
    if hash_tags is not None and hash_tags != "":
        hash_tag_list = hash_tags.split(',')
        try:
            for hash_tag in hash_tag_list:
                hash_tag_feeds = FeedHashTag.objects.filter(hash_tag=hash_tag)
                queryset = queryset.filter(feed_id__in=map(lambda x: x.feed_id_id, hash_tag_feeds))
        except FeedHashTag.DoesNotExist:
            return []
    ...
  • hash_tag_list = hash_tags.split(',') : url_path가 ?hash_tags=4,5 와 같이 작성되면 “4,5”로 가져옵니다. 쉼표를 기준으로 나눠서 “4”, “5”를 hash_tag_list에 넣습니다.
  • for hash_tag in hash_tag_list: : 여러개의 해시태그마다 필터링을 진행합니다.
    • hash_tag_feeds = FeedHashTag.objects.filter(hash_tag=hash_tag) : 해시태그 테이블에서 해당 해시태그를 가진 인스턴스만 필터링해서 변수에 저장합니다. (해시태그 테이블은 feed_id와 해시태그 필드를 가집니다.)
    • queryset = queryset.filter(feed_id__in=map(lambda x: x.feed_id_id, hash_tag_feeds)) : 필터링 된 해시태그 인스턴스들의 피드 id에 매칭되는 인스턴스만 필터링합니다.
profile
개발자

0개의 댓글