ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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)


    댓글