#私藏项目实操分享#愚公系列2022年05月 Python教学课程 75-DRF框架之排序

Posted 愚公搬代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#私藏项目实操分享#愚公系列2022年05月 Python教学课程 75-DRF框架之排序相关的知识,希望对你有一定的参考价值。

一、排序

默认情况下,查询参数被命名为 ,但该参数可能会被该设置覆盖。

例如,要按用户名对用户进行排序:

http://example.com/api/users?ordering=username

客户端还可以通过在字段名称前面加上“-”来指定反向排序,如下所示:

http://example.com/api/users?ordering=-username

还可以指定多个顺序:

http://example.com/api/users?ordering=account,username

1.指定哪些字段可以排序

在排序筛选器中显式指定 API 应允许的字段。您可以通过在视图上设置属性来执行此操作,如下所示:

class UserListView(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = [filters.OrderingFilter]
    ordering_fields = [username, email]

2.所有字段都可排序

这有助于防止意外的数据泄露,例如允许用户针对密码哈希字段或其他敏感数据进行排序。

如果未在视图上指定属性,则筛选器类将默认允许用户筛选该属性指定的序列化程序上的任何可读字段。

如果您确信视图使用的查询集不包含任何敏感数据,则还可以使用特殊值 显式指定视图应允许对任何模型字段或查询集聚合进行排序。

class BookingsListView(generics.ListAPIView):
    queryset = Booking.objects.all()
    serializer_class = BookingSerializer
    filter_backends = [filters.OrderingFilter]
    ordering_fields = __all__

3.默认排序

如果在视图上设置了属性,则此属性将用作默认排序。

通常,您可以通过在初始查询集上进行设置来控制此设置,但是使用视图上的参数可以指定顺序,然后可以将其作为上下文自动传递到呈现的模板。这样,如果使用列标题对结果进行排序,则可以自动以不同的方式呈现列标题。

class UserListView(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = [filters.OrderingFilter]
    ordering_fields = [username, email]
    ordering = [username]

该属性可以是字符串,也可以是字符串的列表/元组。

以上是关于#私藏项目实操分享#愚公系列2022年05月 Python教学课程 75-DRF框架之排序的主要内容,如果未能解决你的问题,请参考以下文章

#私藏项目实操分享#愚公系列2022年02月 阿里云 无影云桌面产品测评

#私藏项目实操分享#愚公系列2022年02月 Docker容器 Oracle的搭建

#私藏项目实操分享#愚公系列2022年04月 微信小程序-项目篇(公交查询)-02周边站点-获取位置和城市信息

愚公系列2022年05月 .NET架构班 075-分布式中间件 ScheduleMaster的基本使用

愚公系列2022年01月 Django商城项目 26-搜索引擎功能实现

#yyds干货盘点#愚公系列2022年12月 微信小程序-项目篇(公交查询)-06站点查询