一、內置和第三方django-filter過濾功能
1 過濾:篩選查詢結果 2 內置篩選的使用 -在視圖類中配置 filter_backends =[SearchFilter,] search_fields=('name','age') # 表模型中的欄位,表示查詢name或age欄位里面有需要查的,可模糊查 -查詢的時候 http://127.0.0.1:8000/students/?search=e #表示查name 或 age里有e的用戶資訊 3 第三方擴展的過濾功能 安裝: -pip3 install django-filter :注意最新版本(2.4.0)要跟django2.2以上搭配
-django-filter有很多功能,比如:模糊查詢以什么開頭,結尾,這個或那個等高級功能,后面會說, 使用: -在視圖類中配置 filter_backends =[DjangoFilterBackend,] filter_fields=['name','age'] #精準過濾,表示查看name為xx,age為xx的用戶,也可寫一個name 或age -查詢的時候 http://127.0.0.1:8000/students/?name=lqz#查name=lqz的用戶 http://127.0.0.1:8000/students/?age=18#查age=18的用戶 http://127.0.0.1:8000/students/?name=lqz&age=18#查name=lili并且age=18的用戶
二、自定制過濾器
#原始碼分析: -查詢所有才會有過濾---》list才需要過濾---》queryset = self.filter_queryset(self.get_queryset())---》GenericAPIView-->filter_queryset def filter_queryset(self, queryset): for backend in list(self.filter_backends): queryset = backend().filter_queryset(self.request, queryset, self) return queryset
自己撰寫
也可以再基于django-filter擴寫,使得功能更強大 1 寫一個類MyFilter,繼承BaseFilterBackend 2 重寫filter_queryset方法,在該方法內部進行過濾(自己設定的過濾條件) 3 回傳queryset物件(過濾后的queryset物件) 4 配置在視圖類中 filter_backends = [MyFilter,] #如果是一個類可以直接寫成filter_backends = MyFilter,因為原始碼里面自己會list一下,變成串列
代碼實作:
略
二、排序功能
-在視圖類中配置 filter_backends =[OrderingFilter,] ordering_fields=['id','age'] -查詢的時候 http://127.0.0.1:8000/students/?ordering=age #按age排 http://127.0.0.1:8000/students/?ordering=-id#按-id排 http://127.0.0.1:8000/students/?ordering=-age,-id #當要排序的用戶age相同時,按照-id排,是有意義的,要考慮實際應用 ### 過濾后再排序 -在視圖類中配置 filter_backends = [OrderingFilter,DjangoFilterBackend] ordering_fields = ('id', 'age') filter_fields=['name','age'] -查詢的時候 http://127.0.0.1:8000/students/?name=lqz&age=19&ordering=-age,-id #篩選出name=lqz并且age=19的用戶,然后按照-age排,如果age再相同,按照-id排
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/212752.html
標籤:架構設計
