为什么我的Django Rest框架搜索过滤器不工作?
这是我的密码。我没有收到任何错误,我可以看到添加到可浏览API的搜索按钮。但问题是搜索不起作用。无论我在搜索中键入什么,它都只返回每个对象为什么我的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 = ['
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()