user15361826
user15361826

Reputation: 321

filter_fields not working in django restframework

views.py

class BannerViewSet(ResponseViewMixin, viewsets.ModelViewSet):
    serializer_class = BannerSerializers
    queryset = Banner.objects.all()
    filter_backends = (filters.SearchFilter, filters.OrderingFilter)
    search_fields = ('title', 'sort_order', 'type')
    filter_fields = ('type',)

    def list(self, request, **kwargs):
        try:
            queryset = self.get_queryset()
            queryset = self.filter_queryset(queryset)
            serializer = BannerSerializers(queryset, many=True)
            response_data = {'Banner': serializer.data}
            return self.jp_response(s_code='HTTP_200_OK', data=response_data)
        except Exception as e:
            print(e)
            return self.jp_error_response('HTTP_500_INTERNAL_SERVER_ERROR', 'EXCEPTION', [str(e), ])

Here I want to filter the banner list using the "type" field. But filter_fields is not working properly, it gives the whole list in the table. give suggestions to fix this.

Upvotes: 0

Views: 702

Answers (1)

neverwalkaloner
neverwalkaloner

Reputation: 47364

You should use django-filter package to achieve desired behavior with viewsets. You can use it something like this:

from django_filters.rest_framework import DjangoFilterBackend

class BannerViewSet(ResponseViewMixin, viewsets.ModelViewSet):
    serializer_class = BannerSerializers
    queryset = Banner.objects.all()
    filter_backends = (filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend)
    search_fields = ('title', 'sort_order', 'type')
    filterset_fields = ('type',)

Upvotes: 1

Related Questions