Filtering
목록조회 APIView에서는 조건에 따른 필터링이 필요 ex. QuerySet의 filter/exclude
필터링에 의한 인자 참조
APIView | @api_view |
self.request.user | self.request.user |
self.request.GET | self.request.GET |
self.request.query_params(GET과 동일) | request.query_params (GET과 동일) |
self.kwargs | 함수의 키워드 인자 |
Generic Filtering / Ordering
SearchFilter → search_fields (반드시 필요) 하나의 속성 참조
search_fields
- 기본(아무것도 쓰지X) : 포함된 문자열 search ex. search_field = [ 'message' ]
- ^ : 시작하는 문자열 serch ex. search_field = [ '^message' ]
- = : 정확하게 매칭 ex. search_field = [ '=username', '=email' ]
- @ : full-text search
- $ : 정규표현식 search
OrderingFilter → ordering_fields, ordering 두 개의 속성 참고
#views.py
from rest_framework.filters import SearchFilter, OrderingFilter
class PostModelViewSet(viewsests.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
filter_backends = [SearchFilter, OrderingFilter]
search_fidels = ['message'] # ?serch= -> QuerySet조건 절에 추가할 필드 지정, 문자열 필드만 지정 가능
ordering_fields = ['id'] # ?ordering= -> 정렬을 허용할 필드 지정, 미지정 시에 serializer_class에 지정된 필드 사용
ordering = ['id'] # 디폴트 정렬 지정