Django

drf filter __ 언더스코어

끈끈 2023. 6. 14. 01:15

 

Community > Category > Feed의 구조이다

 

class FeedCategoryListView(APIView):
    pagination_class = CustomPagination()

    # feed 카테고리 리스트 view
    def get(self, request, community_name, category_name):
        feed_list = Feed.objects.filter(category__community__title=community_name, category__category_name=category_name).order_by("-created_at")

 

category__community_title이라는 표현은 실제로는 존재하지 않는 필터 조건이지만,

 

Django에서는 필터링 시 관계된 모델의 필드에 접근할 때 __ (언더스코어)를 사용하여 관계를 탐색한다

 

따라서 category__community__title=community_name과 같은 형태를 통해

 

community = Community.objects.get(title=community_name)
category = Category.objects.get(category_name=category_name)

 

여러번 해당 조건의 객체를 가져올 필요 없이

 

feed_list = Feed.objects.filter(category__community__title=community_name, category__category_name=category_name)

 

위와 같은 한 줄로 category 필드의 Community 모델의 title 필드와

 

Category 모델의 community_name 값이 일치하는 Feed 객체들이 필터링된다

 

'Django' 카테고리의 다른 글

Django 50문 50답  (4) 2023.07.26
django signal pre_save  (2) 2023.06.15
drf swagger 문서화  (1) 2023.05.29
Django admin 페이지 커스텀하기  (1) 2023.05.23
Django sqlite3 mysql로 변경하기  (11) 2023.05.09