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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章