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)


+ Random Posts