Использование Django -фильтра с DRF - PullRequest
2 голосов
/ 02 августа 2020

Я пытаюсь использовать django -фильтр с DRF.

Я пытаюсь выполнить интеграцию с DRF, описанную здесь:

https://django-filter.readthedocs.io/en/stable/guide/rest_framework.html

Вот мой класс просмотра:

class PageView(APIView):
    filter_backends = (filters.DjangoFilterBackend,)
    filter_fields = ('category', 'start_date', "end_date", "limit")

    def get(self, request):
        page_saves = Page.objects.all()
        serializer = PageSerializer(page_saves, many=True)
        return Response({"pages": serializer.data})

Однако я чувствую, что мне что-то не хватает - ничего не фильтруется.

Нужен ли мне такой фильтр:

class PageFilter(filters.FilterSet):

с некоторым логом c в нем?

Я просто не совсем уверен, как заставить фильтрацию работать здесь

1 Ответ

1 голос
/ 02 августа 2020

Вы должны позвонить self.filter_queryset, иначе он не будет использовать класс из filter_backend (https://github.com/encode/django-rest-framework/blob/559088463b8625880e6a03dde804cb5a61da3088/rest_framework/generics.py#L140)

Рассмотрите возможность выполнения следующих действий:

from rest_framework import generics
class PageView(generics.GenericAPIView):
    filter_backends = (filters.DjangoFilterBackend,)
    filter_fields = ('category', 'start_date', "end_date", "limit")

    def get(self, request):
        page_saves = self.filter_queryset(Page.objects.all())
        serializer = PageSerializer(page_saves, many=True)
        return Response({"pages": serializer.data})

В примере в документации django -filter используется ListAPIView, который вызывает self.filter_queryset внутри своей get реализации.

...