使用IN运算符过滤Django REST框架

时间:2016-03-27 18:10:35

标签: django django-rest-framework

我基本上需要/?status=[active,processed]/?status=active,processed

之类的东西

我当前的设置是:'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',)并且它只是正确过滤了一个值(/?status=active

2 个答案:

答案 0 :(得分:3)

我认为没有内置功能。但是您可以实现自定义过滤器来执行此操作。您可以在过滤网中使用此自定义过滤器。

import django_filters as df

class InListFilter(df.Filter):
    """
    Expects a comma separated list
    filters values in list
    """
    def filter(self, qs, value):
        if value:
            return qs.filter(**{self.name+'__in': value.split(',')})
        return qs

class MyFilterSet(df.FilterSet):
    status = InListFilter(name='status')

答案 1 :(得分:0)

使用Class.object.filter方法时可以使用“ field_in”。

class FileterdListAPIView(generics.ListAPIView):
    serializer_class = FooSerializer

    def get_queryset(self):
        user_profile = self.kwargs['pk']
        if user_profile is not None:
            workers = Worker.objects.filter(user_profile = user_profile)
            queryset = MyModel.objects.filter(worker_in=(workers))
        else:
            return ''

        return queryset