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

本文介绍如何在Django REST Framework中对API结果进行过滤和排序,包括重写get_queryset方法、使用django-filter库和内置的SearchFilter类。同时展示了如何使用OrderingFilter进行排序,并提供了示例请求和效果。
摘要由CSDN通过智能技术生成

在前面的DRF系列教程中,我们以博客为例介绍了序列化器(Serializer), 并使用基于类的视图APIView和ModelViewSet开发了针对文章资源进行增删查改的完整API端点,并详细对权限、认证(含jwt认证)和分页进行了总结与演示。在本篇文章中我们将向你演示如何在Django REST Framework中对分页结果进行进一步过滤和排序。

前面教程中当你发送GET请求到/v1/articles?page=2时可以得到下面返回的分页数据列表。现在我们希望对结果进行进一步过滤,比如返回标题含有关键词django的文章资源列表。我们到底该怎么做呢? 本例中小编我将演示三种方法, 你可以根据实际项目开发需求去使用。

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

此方法不依赖于任何第三方包, 只适合于需要过滤的字段比较少的模型。比如这里我们需要对文章title进行过滤,我们只需要修改ArticleList视图函数类即可。

# blog/views.py


from rest_framework import generics
from rest_framework import permissions
from .permissions import IsOwnerOrReadOnly
from .pagination import MyPageNumberPagination


class ArticleList(generics.ListCreateAPIView):
    serializer_class = ArticleSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
    pagination_class = MyPageNumberPagination


    def get_queryset(self):
        keyword = self.request.query_params.get('q')
        if not keyword:
            queryset = Article.objects.all()
        else:
            queryset = Article.objects.filter(title__icontains=keyword)
        return queryset


    # associate user with article author.
    def perform_create(self, serializer):
        serializer.save(author=self.request.user)

修改好视图类后,发送GET请求到/v1/articles?page=2&q=django, 你将得到所有标题含有django关键词的文章列表,这里显示一共有3条结果。

当一个模型需要过滤的字段很多且

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值