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