django中过滤 搜索 排序
过滤
-对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。
pip install django-filter
-在配置文件中增加过滤后端的设置:
INSTALLED_APPS = [
...
'django_filters', # 需要注册应用,]
-全局设置REST_FRAMEWORK = { ... 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',) }
-在视图中添加filter_fields属性,指定可以过滤的字段
from django_filters.rest_framework import DjangoFilterBackend
class BookListView(ListAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
-局部设置
filter_backends = [DjangoFilterBackend]
# 接口:/api/cars/?price=900000&brand=1
filter_fields = ('brand', 'price') #过滤的字段
搜索
from rest_framework.filters import SearchFilter
# 筛选
filter_backends = [DjangoFilterBackend, SearchFilter]
# 接口:/api/cars/?search=9 代表9在name或price两个字段进行模糊查询
search_fields = ('name', 'price')
排序
from rest_framework.filters import OrderingFilter
# 排序
# 接口:/api/cars/?ordering=-id | /api/cars/?ordering=-price
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
ordering_fields = ('id', 'price')