해당 포스팅에서 DRF의 필터링 기능에 대해 알아보았다.
class ArticleView(viewsets.ModelViewSet):
queryset = Article.objects.all().order_by('-pk')
serializer_class = ArticleSerializer
permission_classes = [IsOwnerOrReadOnly]
filter_backends = [filters.SearchFilter, DjangoFilterBackend]
filterset_fields = ('title', 'createuser__nickname')
search_fields = ('title', 'createuser__nickname')
그런데 보통 커뮤니티에는 특정 필드를 검색하는 기능이 있다.
그렇다면 이러한 기능을 구현하기 위해서는 어떻게 해야될까?
우선 필드별로 필터링해주는 filterset_fields
과 검색 필터링을 제공하는 search_fields
모두 넣어준다.
엔드포인트에서는 필드 전체에 대한 검색 필터링과 필드 필터링 모두 표기되지만 막상 둘다 사용할 수가 없다.
예를 들면 제목에서 '빵'이 들어간 게시물을 검색한다던지, 내용에서 '밥'이 들어간 게시물을 검색하는 것이 안된다는 뜻이다.
이러한 엔드포인트에서는 해결할 수 없고 직접 쿼리스트링으로 주소창에 입력해주어야한다.
예를 들어서 Article
의 title
필드에서 검색을 하고 싶다면
http://127.0.0.1:8000/article/?title=&search=keyword
이런식으로 쿼리스트링을 이용하면 엔드포인트의 도움없이 원하는 필드에서 검색을 진행할 수 있다.