<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
當我們需要對後臺的資料進行過濾的時候,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
="寶馬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"
,那麼我們就會過濾出所有寶馬系列的車子,並且資料的排序按照車的價格從低到高排序
PS:過濾功能利用的是第三方包 django_filters,搜尋和排序利用的是 Django DRF 提供的 filters
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搜尋過濾和排序過濾內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45