1.DjangoFilterBackend의 filterset_fields 사용 방법
pip install django-filter
settings.py
INSTALLED_APPS = [
...
'django_filters' #추가
]
views.py
from django_filters.rest_framework import DjangoFilterBackend
filter_backends = [DjangoFilterBackend]
filterset_fields = ['category', 'colors','price']
이런식으로 위에 필터가 추가 되어있는것을 알수있다.
query parameter는 해당 field 명으로 엔드포인트에 붙는 것을 확인할 수 있다.
2. search_fields 사용 방법
from rest_framework import filters
filter_backends = [filters.SearchFilter]
search_fields = ['name']
search_fields에 지정된 field에 query parameter(search) 전달된 값을 대입하여 필터링을 진행한다.
이런 Search창이 생기게 되며 앞서 설명한 필터와 동일하게 filter내부에 있다.
qeury parameter로 전달된 값을 필터할 때, 아래의 옵션을 사용하여 더 효과적으로 필터링이 가능하다.
from rest_framework import filters
filter_backends = [filters.SearchFilter]
search_fields = ['$name']
3. OrderFilter의 ordering_fields 사용 방법
from rest_framework import filters
filter_backends = [DjangoFilterBackend, filters.SearchFilter,filters.OrderingFilter]
ordering_fields = ['id','price']
ordering = ['id']
물론 위에서 나온 3개를 섞어서 사용하는 방법도 있다.
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters
class ProductView(generics.ListAPIView):
queryset = Product.objects.all()
serializer_class = ProductSerializers
filter_backends = [DjangoFilterBackend, filters.SearchFilter,filters.OrderingFilter]
filterset_fields = ['category', 'colors','price']
search_fields = ['$name']
ordering_fields = ['id','price']
ordering = ['id']
이런경우
이런식으로 한 화면에서 필터링이 가능하다!