django中过滤 搜索 排序
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') #过滤的字段
## 搜索
```python
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')
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步