피드의 구성요소 중 해시태그가 있습니다. 해시태그를 통한 필터링을 구현하여 원하는 호선의 피드를 볼 수 있도록 하려고 합니다.
다음은 serializer에 데이터를 넘기기 전에 어떤 인스턴스를 넘겨줄지 정하는 함수 get_queryset입니다. 해시태그 여러개를 받아 그 해시태그를 가진 피드만 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에 매칭되는 인스턴스만 필터링합니다.