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

后端 未结 7 1303
野性不改
野性不改 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条回答
  •  旧时难觅i
    2020-12-09 18:21

    For better or worse, I created a custom filter for this:

    class IntegerListFilter(django_filters.Filter):
        def filter(self,qs,value):
            if value not in (None,''):
                integers = [int(v) for v in value.split(',')]
                return qs.filter(**{'%s__%s'%(self.name, self.lookup_type):integers})
            return qs
    

    Which is used like:

    class MyFilter(django_filters.FilterSet):   
        ids = IntegerListFilter(name='id',lookup_type='in')
        class Meta:
            model = MyModel
            fields = ('ids',)
    
    class MyModelViewSet(viewsets.ModelViewSet):
        queryset = MyModel.objects.all()
        serializer_class = MyModelSerializer
        filter_class = MyFilter
    

    Now my interface accepts comma-delimited lists of integers.

提交回复
热议问题