Фильтры Django с APIVIew возвращают полный набор запросов

Я пытаюсь использовать django filter с APIVIew, как я видел в этом посте и получаю неожиданное поведение: Если слово, переданное в фильтр, не существует, он ничего не возвращает - OK Если слово, переданное по фильтру, существует, то возвращается полный набор запросов.

Я уже пытался использовать фильтры с ModelViewSet и это работает, но у меня ничего не получается с APIView. Я использую следующий код:

просмотров:

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from core.models import Profile
from core.serializers import ProfileSerializer
from django_filters.rest_framework import DjangoFilterBackend


class ProfileFilter(DjangoFilterBackend):

    def filter_queryset(self, request, queryset, view):
        filter_class = self.get_filter_class(view, queryset)

        if filter_class:
            return filter_class(request.query_params, queryset=queryset, request=request).qs

        return queryset


class ListProfileView(APIView):
    serializer_class = ProfileSerializer
    filter_fields = ('nome', 'link')
    queryset = Profile.objects.all()

    def get(self, request, format=None):
        queryset = Profile.objects.all()

        ff = ProfileFilter()
        filtered_queryset = ff.filter_queryset(request, queryset, self)

        if filtered_queryset.exists():
            serializer = self.serializer_class(queryset, many=True)
            return Response(serializer.data, status=status.HTTP_200_OK)
        else:
            return Response([], status=status.HTTP_200_OK)


    def post(self, request, format=None):
        serializer = self.serializer_class(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

модель:

from django.db import models


class Profile(models.Model):
    nome = models.CharField(max_length=200, null=False, blank=False)
    link = models.CharField(max_length=200, null=False, blank=False)

сериализаторы:

from rest_framework.serializers import ModelSerializer

from core.models import Profile


class ProfileSerializer(ModelSerializer):
    class Meta:
        model = Profile
        fields = '__all__'
Вернуться на верх