使用IN运算符筛选Django REST框架

使用IN运算符筛选Django REST框架,django,django-rest-framework,Django,Django Rest Framework,我基本上需要像/?status=[活动,已处理]或/?status=活动,已处理 我当前的设置是:'DEFAULT\u FILTER\u BACKENDS':('rest\u framework.filters.DjangoFilterBackend',),它只正确过滤了一个值(/?status=active)我认为没有内置的功能。但是您可以实现一个自定义过滤器来实现这一点。此自定义筛选器可在筛选器集中使用 import django_filters as df class InListFil

我基本上需要像
/?status=[活动,已处理]
/?status=活动,已处理


我当前的设置是:
'DEFAULT\u FILTER\u BACKENDS':('rest\u framework.filters.DjangoFilterBackend',)
,它只正确过滤了一个值(
/?status=active

我认为没有内置的功能。但是您可以实现一个自定义过滤器来实现这一点。此自定义筛选器可在筛选器集中使用

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')

使用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

这对我有用,谢谢。不过有一个更新,现在是
self.field\u name
,而不是
self.name
。对于其他想知道的人,这就是如何将其添加到视图类中的方法:
filter\u class=MyFilterSet