DRF SearchFilter в ListAPIViews

Я работаю на Django==3.2.7, djangorestframework==3.12.4 и django-filter==21.1. и React для фронтенда

Что бы я хотел сделать:

  1. Return Job Offer objects that contains words from search (Search fields job_title and localistation)
  2. Remove useless words like ('in', 'a', 'an', 'the', 'at', 'for', 'to') in search

вот пример url:

{{URL}}/api/v1/job-offers/jobs/?search=Chef in Texas
allowed_methods = ['GET']

Что я сделал до сих пор в моем (ListAPIView):

class JobOfferListAPIView(generics.ListAPIView):
    permission_classes = [permissions.IsAuthenticated]
    queryset = JobOffer.objects.all()
    serializer_class = JobOfferSerializer
    filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend]

    search_fields = ['job_title', 'localisation']
    ordering_fields = ['user', 'is_active']
    filterset_fields = ['user', 'is_active', 'job_title', 'type_of_job', 'start_date', 'salary', 'localisation']

    def get_queryset(self, *args, **kwargs):
        exclude_words = ['in', 'a', 'an', 'the', 'at', 'for', 'to']
        keywords = self.request.GET.get('search').split(' ')
        keywords = [keyword for keyword in keywords if keyword not in exclude_words]
        if keywords:
            for keyword in keywords:
                queryset = queryset.filter(
                    Q(job_title__icontains=keyword) | Q(localisation__icontains=keyword)
                )
            print(queryset)
        return queryset

Problème: Когда я печатаю набор запросов, я вижу отфильтрованные предложения работы в терминале, но они не возвращаются в Postman.

Экран терминала: Terminal Screen

Экран почтальона

Postman Screen

Поделитесь, пожалуйста, кодом вашего сериализатора.

Для проверки того, разбирается ли набор запросов в сериализаторе или нет, используйте raise Exception(queryset) или, если все правильно, raise Exception(serializer.data)

Вернуться на верх