-
[Django] Custom FilterSet (FilterSet으로 복잡한 쿼리 실행하기)언어/파이썬 & 장고 2019. 8. 31. 20:34
Django FilterSet 라이브러리는 GET 요청을 받고 쿼리 파라미터를 제어하는 기능을 제공합니다.
아래는 기본적으로 filterset을 사용한 예제입니다.
http://127.0.0.1:8000/test?name=kim class NameFilter(filters.FilterSet): name = django_filters.CharFilter( name='name', lookup_expr='icontains' )
만약 위와 같은 구조가 아닌 여러 컬럼에 접근해야 한다면 아래와 같이 method를 지정하여 처리를 하도록 합니다.
http://127.0.0.1:8000/test?name=kim class NameFilter(filters.FilterSet): name = django_filters.CharFilter( method='custom_name_filter' ) def custom_name_filter(self, queryset, value, *args): return queryset.filter(name=args[0], nickname=args[0])
또는 아래와 같이 하나의 필드에 여러 값을 받은 다음 처리할 수 있습니다.
http://127.0.0.1:8000/test?multi=kim,5123 class MultiFilter(filters.FilterSet): multi = django_filters.CharFilter( method='custom_multi_filter' ) def custom_multi_filter(self, queryset, value, *args): temp = args[0].split(',') name_list = [] no_list = [] for data in temp: if data.isdigit(): no_list.append(int(data)) else: name_list.append(data) return queryset.filter(name__in=name_list, no__in=no_list)