Possible to do an `in` `lookup_type` through the django-filter URL parser?

后端 未结 7 1278
野性不改
野性不改 2020-12-09 17:52

I\'m using django-filter with django-rest-framework and I\'m trying to instantiate a filter that accepts lists of numbers for filtering the query set down

c         


        
7条回答
  •  执笔经年
    2020-12-09 18:31

    Here's a complete solution:

    from django_filters import Filter, FilterSet
    from rest_framework.filters import DjangoFilterBackend
    from rest_framework.viewsets import ModelViewSet
    from .models import User
    from .serializers import UserSerializer
    
    
    class ListFilter(Filter):
    
        def filter(self, qs, value):
            if not value:
                return qs
    
            self.lookup_type = 'in'
            values = value.split(',')
            return super(ListFilter, self).filter(qs, values)
    
    
    class UserFilter(FilterSet):
        ids = ListFilter(name='id')
    
        class Meta:
            model = User
            fields = ['ids']
    
    
    class UserViewSet(viewsets.ModelViewSet):
        serializer_class = UserSerializer
        queryset = User.objects.all()
        filter_backends = (DjangoFilterBackend,)
        filter_class = UserFilter
    

提交回复
热议问题