科普search_fields与filter_fields的区别

from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter

class OnlyViewSet(viewsets.ModelViewSet):
    queryset = Only.objects.all()
    permission_classes = (AllowAny,)
    serializer_class = serializers.OnlySerializer
    filter_backends = (SearchFilter, DjangoFilterBackend)
    search_fields = ('ip',)
    filter_fields = ('ip', 'stat', 'role', 'db_type')

上面是一个django-rest框架的接口例子。用这个例子来区分一下两者的不同

search_fields 里的字段,是做模糊查询的字段,url中的关键字是“search”,如:

http://xxx.com/api/only/?search=ffss

这时后端的接口就去search_fields里的“ip”字段里做模糊查询,如果search_fields里有多个字段,就会在这个多个字段里全部做模糊匹配。

filter_fields 里的字段,是做精确查询的字段,url中的关键字就是filter_fields里的各个字段,如:

http://xxx.com/api/only/?ip=&stat=0&role=&db_type=

这时后端的接口就去filter_fields里的各个字段比对,如果有这个字段,就做这个字段的精准匹配,最后的结果是这几个字段的精准匹配都符合条件(各个过滤条件间是与的关系----and)。

你可能感兴趣的:(后端,search_fields,filter_fields)