【问题标题】:DRF SearchFilter in ListAPIViewsListAPIViews 中的 DRF SearchFilter
【发布时间】:2022-06-18 11:15:34
【问题描述】:

我正在研究 Django==3.2.7、djangorestframework==3.12.4 和 django-filter==21.1。并为前端做出反应

我想做的事

  1. 返回包含搜索字词的 Job Offer 对象(搜索字段 job_title 和 localistation)
  2. 删除搜索中的无用词,例如 ('in', 'a', 'an', 'the', 'at', 'for', 'to')

这里是 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

问题: 当我打印查询集时,我可以在终端中看到过滤的工作机会,但在 Postman 中没有返回。

终端屏幕:

邮递员屏幕

【问题讨论】:

    标签: django django-rest-framework drf-queryset


    【解决方案1】:

    检查您的序列化程序是否设置为many=True。 当您向序列化程序返回多个实例时,它应该如下所示:

    serializer = YourListSerializer(queryset, many=True)
    

    【讨论】:

      猜你喜欢
      • 2017-12-15
      • 1970-01-01
      • 2020-05-14
      • 2021-09-15
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多