過濾功能利用的是第三方包 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 = 10page_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
# 3. 在 filter_backends 中新增 djangofilterbackend,在 filterset_fields 中新增 過濾字段
這個方式的過濾是精確過濾,即 使用者傳過來的值必須和 對應過濾欄位的值完全一樣才能過濾出來;
如果想自定義過濾功能(例如想過濾出**區間),可通過方式三
""""""
方式三:通過 django-filter 自定義 過濾功能
1. 自定義乙個過濾類
2. filter_backends = (djangofilterbackend,)
3. filterset_class = goodsfilter # 把自定義的過濾類 goodsfilter 賦值給 filterset_class
"""
django-filters 文件:
layui排序功能
後台常用功能之排序!一次只能排乙個序!序號 操作 名稱顯示 建立日期 排序 id sort on click function create time sort on click function 處理排序的邏輯 處理排序 function deal sort val sort else else ...
drf 過濾與排序
drf中如果想在url中直接寫過濾與排序,則需要安裝第三方模組。pip install django filter其次你需要將該模組註冊進行django配置檔案中。rest framework django filters 以下是一張書籍表和資料,我可能通過書名查,也可能通過 查詢。可能通過 排序,...
map實現排序功能
map內部是按照hash演算法儲存的,但如果能對map排序在某些時候還是有用的 param h return 實現對map按照value公升序排序 suppresswarnings unchecked public static map.entry getsortedhashtablebyvalue...