为什么我的Django Rest框架搜索过滤器不工作?

为什么我的Django Rest框架搜索过滤器不工作?,django,filter,django-rest-framework,Django,Filter,Django Rest Framework,这是我的密码。我没有收到任何错误,我可以看到添加到可浏览API的搜索按钮。但问题是搜索不起作用。无论我在搜索中键入什么,它都只返回每个对象 from rest_framework import status, filters class JobView(GenericAPIView): serializer_class = JobSerializer filter_backends = [filters.SearchFilter] search_fields = ['

这是我的密码。我没有收到任何错误,我可以看到添加到可浏览API的搜索按钮。但问题是搜索不起作用。无论我在搜索中键入什么,它都只返回每个对象

from rest_framework import status, filters

class JobView(GenericAPIView):

    serializer_class = JobSerializer
    filter_backends = [filters.SearchFilter]
    search_fields = ['name']

    def get_queryset(self):
        return Job.manager.all()

    def get(self, request, format=None):
        queryset = self.get_queryset()

        if queryset.exists():
            serializer = JobSerializer(queryset, many=True)
            return Response(serializer.data)
        else:
            return Response({"Returned empty queryset"}, status=status.HTTP_404_NOT_FOUND)
端点

http://localhost:8000/jobs/?search=something
returns the same as
http://localhost:8000/jobs/

无论我在搜索字符串中输入什么,它都会返回作业。

我认为您应该根据通过GET发送的参数筛选查询集,因为它不会自动发生。使用
request.query\u params.get('search')
访问您的参数。

这基本上不起作用,因为您试图做的太多了。您已经编写了自己的
get
方法,它绕过了DRF视图的所有魔力。特别是,通过不调用
GenericAPIView.get_object
,可以避免出现如下行

    queryset = self.filter_queryset(self.get_queryset())
这就是查询集被过滤的地方。这个简单的版本,实际上与中的版本相同,应该可以工作

from rest_framework import status, filters, generics

class JobView(generics.LisaAPIView):
    queryset = Job.manager.all()
    serializer_class = JobSerializer
    filter_backends = [filters.SearchFilter]
    search_fields = ['name']
注:根据你的问题,我假设:

  • 您的
    作业
    模型具有
    名称
    字段

  • 由于某种原因,您通过调用
    models.manager()