上海启嘟渡科技商贸有限公司
SEARCH

与我们合作

我们专注提供互联网一站式服务,助力企业品牌宣传多平台多途径导流量。
主营业务:网站建设、移动端微信小程序开发、营销推广、基础网络、品牌形象策划等

您也可通过下列途径与我们取得联系:

微 信: wxyunyingzhe

手 机: 15624122141

邮 箱:

Django REST Framework教程(9): 过滤(filter)与排序(多图)

更新时间:2025-01-10 16:45:54

在Django REST Framework中,对分页结果进行过滤和排序是构建高效API的关键步骤。本文将介绍三种方法,以帮助开发者在项目中实现这一功能。

### 方法一:重写 GenericsAPIView 或 viewset 的 get_queryset 方法

当过滤字段较少时,可以通过重写这些方法来实现。例如,只需修改 ArticleList 视图函数类,针对文章标题进行过滤。发送 GET 请求到 /v1/articles?page=2&q=django,即可获取所有标题中包含“django”关键词的文章列表,显示结果为3条。

### 方法二:使用 django-filter 库

django-filter 库提供了高度定制化的字段过滤功能。安装并使用此库可以方便地过滤字段,并能对每个字段指定不同的过滤方法,如模糊查询和精确查询。具体步骤如下:

1. **安装 django-filter**:通过 pip 安装。

2. **添加到 INSTALLED_APPS**:确保在项目设置中包含 django_filters。

3. **自定义 FilterSet 类**:在 blog/filters.py 中创建 FilterSet 类,实现按标题关键词和文章状态过滤。

4. **集成到 View 类或 ViewSet**:将自定义的 FilterSet 类集成至视图类,并设置 DjangoFilterBackend。

发送 GET 请求时,如 /v1/articles?page=2&q=django&status=p,将返回只包含已发布文章的列表。

### 方法三:使用 DRF 的 SearchFilter 类

DRF 内置的 SearchFilter 类适用于通过关键词同时搜索多个字段。修改 search_fields 属性以实现多字段搜索。例如:

1. **搜索关键词**:发送 GET 请求到 /v1/articles?page=1&search=django,返回结果包括标题或用户名包含“django”的文章。

2. **指定匹配方法**:通过在 search_fields 中添加不同字符来指定匹配方法,如精确匹配(使用 `=`)。

### 排序方法:使用 DRF 的 OrderingFilter 类

实现排序功能,只需将 OrderingFilter 类添加到 filter_backends,并指定排序字段。发送请求时,通过 `?ordering=create_date` 或 `?ordering=-create_date` 实现正序或逆序排序。

### 综合应用:结合过滤与排序

在实际项目中,通常会结合使用 SearchFilter、OrderingFilter 以及 DjangoFilterBackend。这三种方法没有冲突,可以协同工作,提供更强大的查询能力。

### 小结

本文总结了在Django REST Framework中如何实现对分页结果的过滤与排序,涵盖了三种方法的详细步骤与应用示例。通过掌握这些技巧,开发者能构建出更为灵活且高效的API。为了继续深入学习Django REST Framework,欢迎关注【Python Web与Django开发】微信公众号,获取更多原创干货内容。祝您编程愉快!

多重随机标签

猜你喜欢文章

QQ客服 电话咨询