DRF 過濾 搜尋 排序功能

2022-05-09 22:29:41 字數 3024 閱讀 6615

過濾功能利用的是第三方包 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...