-
過濾
對於列表數據可能需要根據字段進行過濾,我們可以通過添加 django-filter
擴展來增強支持。
pip install django-filter
在配置文件中增加過濾后端的設置:
INSTALLED_APPS = [
...
'django_filters', # 需要注冊應用, ]
-
全局配置
在settings文件中配置:
REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',) # 全局配置,對全部視圖的查詢多條接口都有過濾功能,但是視圖里要指定字段 }
視圖中指定要過濾的字段:
class EmployeeViewSet(ModelViewSet): queryset = Employee.objects.all() serializer_class = EmployeeSerializer # 指定可以根據哪些字段進行列表數據的過濾 filter_fields = ('gender', 'department')
-
針對某個視圖進行過濾(比較常用)
class EmployeeViewSet(ModelViewSet): queryset = Employee.objects.all() serializer_class = EmployeeSerializer # 指定過濾器 filter_backends = [DjangoFilterBackend] # 指定可以根據哪些字段進行列表數據的過濾 filterset_fields = ('gender', 'department')
-
使用
訪問127.0.0.1/employees?gender=1時可以過濾出性別字段是1的數據。
===================================================================================================================================
-
排序
對於列表數據,REST framework 提供了 OrderingFilter
過濾器 來實現按指定字段進行排序的功能
使用方法:
- 在類視圖中設置
filter_backends
,使用rest_framework.filters.OrderingFilter(自帶的模塊,導包時注意)
過濾器:REST framework會在請求的查詢字符串參數中檢查是否包含了ordering
參數,如果包含,則按照ordering
參數指定的字段對數據集進行排序。- 在類視圖中指定
ordering_fields
屬性,表示前端請求列表數據時,可以通過哪些字段進行排序
設置示例:
class EmployeeViewSet(ModelViewSet): queryset = Employee.objects.all() serializer_class = EmployeeSerializer # 新增排序的過濾器 filter_backends = [..., OrderingFilter] # 指定可以根據哪此字段進行排序 ordering_fields = ('age', 'salary')
使用示例:
訪問127.0.0.1/employees/?ordering=age(年齡升序)
訪問127.0.0.1/employees/?ordering=-age(年齡降序)
訪問127.0.0.1/employees/?ordering=age,-salary(先安裝年齡升序來排,如果年齡一樣,按工資升序來排)