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)。