Django 는 drf 검색 필터 와 정렬 필 터 를 실현 합 니 다.
백 엔 드 의 데 이 터 를 필터 해 야 할 때
drf
는 두 가지 가 있 습 니 다.필터 와 정렬 필 터 를 검색 합 니 다.검색 필터:예 를 들 어 우리 가 되 돌아 가 고 싶 은 것
sex=1
은 모든 데이터 에서 선별 할 수 있 습 니 다.정렬 필터:예 를 들 어 우리 가 가격 을 오름차 순 으로 배열 하려 면 정렬 필 터 를 사용 할 수 있 습 니 다.
검색 필터
실제 사용 과정 에서 매우 간단 합 니 다.보기 류 에 전역 변수
filter_backends
를 설정 한 다음search_fields
에서 어떤 필드 를 통 해 선별 해 야 하 는 지 확인 하 십시오.
from rest_framework.filters import SearchFilter
class CarView(ListAPIView):
serializer_class = CarSerializer
queryset = Car.objects.all()
#
filter_backends = [SearchFilter]
# SearchFilter
search_fields = ['name']
그 후에 우리 가url
주 소 를 방문 할 때url
뒤에?search=" 1 "
추가 할 수 있다.그러면 우 리 는name
='BMW 1 학과'의 데 이 터 를 걸 러 낼 것 이다.정렬 필터
검색 필터 와 마찬가지 로 부분 변수
filter_backends
를 설정 한 다음 설정ordering_fields
을 통 해 어떤 필드 를 통 해 정렬 할 지 확인 합 니 다.
from rest_framework.filters import SearchFilter, OrderingFilter
class CarView(ListAPIView):
serializer_class = CarSerializer
queryset = Car.objects.all()
#
filter_backends = [SearchFilter, OrderingFilter]
# SearchFilter
search_fields = ['name']
#
ordering_fields = ['price']
그 후에 우 리 는url
주 소 를 방문 할 때url
뒤에?search=" "&ordering="price"
를 추가 할 수 있다.그러면 우 리 는 모든 BMW 시리즈 의 차 를 걸 러 내 고 데이터 의 순 서 는 차 의 가격 에 따라 낮은 것 에서 높 은 것 으로 정렬 할 것 이다.PS:필터 기능 은 제3자 패키지 django 를 이용 합 니 다.filers,검색 과 정렬 은 Django DRF 가 제공 하 는 filter 를 이용 합 니 다.
from rest_framework import filters # # : DRF
from django_filters.rest_framework import DjangoFilterBackend # DjangoFilterBackend ( ) ,
import django_filters
class GoodsFilter(django_filters.rest_framework.FilterSet):
""" """
min_price = django_filters.NumberFilter(field_name="price",
lookup_expr="gte") # field_name ;lookup_expr ,gte
max_price = django_filters.NumberFilter(field_name="price", lookup_expr="lte") # lte
name = django_filters.CharFilter(field_name="name",lookup_expr="icontains") # icontains ( )
class Meta:
model = models.Goods #
fields = ["min_price","max_price","name"] #
class GoodsPagination(PageNumberPagination):
page_size = 10
page_size_query_param = "page_size"
page_query_param = "p"
max_page_size = 100
class GoodsListViewSet(mixins.ListModelMixin,GenericViewSet):
""" """
queryset = models.Goods.objects.all() # get_queryset() , queryset; get_queryset , , get_queryset() queryset
pagination_class = GoodsPagination
# : ( )
filter_backends = (DjangoFilterBackend,filters.SearchFilter,filters.OrderingFilter) # filters.SearchFilter ;filters.OrderingFilter
filterset_class = GoodsFilter # GoodsFilter filterset_class
search_fields = ('^name', 'goods_brief') # # '^' Starts-with search;'=' Exact matches.
ordering_fields = ("sold_num","add_time") #
# ...
"""
#
filter_backends = (DjangoFilterBackend,) #
filterset_fields = ("name","shop_price") # #
"""
"""
# :get_queryset()
def get_queryset(self): # ; GenericAPIView
queryset = models.Goods.objects.all()
price_min = self.request.query_params.get("price_min",0)
if price_min:
queryset = queryset.filter(shop_price_gt=int(price_min))
return queryset
"""
"""
: django-filter
# 1. pip install django-filter
# 2. "django-filters" Django INSTALLED_APPS
# 3. filter_backends DjangoFilterBackend, filterset_fields
, ;
( ),
"""
"""
: django-filter
1.
2. filter_backends = (DjangoFilterBackend,)
3. filterset_class = GoodsFilter # GoodsFilter filterset_class
"""
Django 가 drf 검색 필터 와 정렬 필 터 를 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 drf 검색 필터 와 정렬 필터 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.