How do you filter one field using multiple values in ListAPIView in Django REST framework?

Viewed 413

How do you filter one field using multiple values in ListAPIView in Django REST framework?

URL: /api/items/?status=active&status=pending

I need to get results that have either "active" or pending "status". What filter_backends will be good for my case?

2 Answers

You can use the django-filter package's DjangoFilterBackend for that:

from django_filters import DjangoFilterBackend

class profile_view(generics.ListAPIView):
    queryset = ModelName.objects.all()
    serializer_class = SerializerName
    filter_backends = [DjangoFilterBackend]
    filter_fields = {
        'status': ["in", "exact"] # icontains ,exact, gte, lte, in
         # if you want to add more fields, you can
    }

then you can filter data by ?status__in=active, pending or status=active.

Yes, you can use DjangoDefaultFilterBackend like that:

from django_filters import DjangoFilterBackend
class YourListAPI(generics.ListAPIView):
    queryset = YourModel.objects.all()
    serializer_class = YourSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['status']

You can find more detail abouth drf-filtering

If you want to use filter multiple values for same field , there is a good answer here

Related