前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年04月 Python教学课程 75-DRF框架之排序

【愚公系列】2022年04月 Python教学课程 75-DRF框架之排序

作者头像
愚公搬代码
发布2022-04-21 08:08:58
3210
发布2022-04-21 08:08:58
举报
文章被收录于专栏:历史专栏

文章目录

一、排序

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

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

代码语言:javascript
复制
http://example.com/api/users?ordering=username

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

代码语言:javascript
复制
http://example.com/api/users?ordering=-username

还可以指定多个顺序:

代码语言:javascript
复制
http://example.com/api/users?ordering=account,username

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

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

代码语言:javascript
复制
class UserListView(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = [filters.OrderingFilter]
    ordering_fields = ['username', 'email']

2.所有字段都可排序

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

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

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

代码语言:javascript
复制
class BookingsListView(generics.ListAPIView):
    queryset = Booking.objects.all()
    serializer_class = BookingSerializer
    filter_backends = [filters.OrderingFilter]
    ordering_fields = '__all__'

3.默认排序

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

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

代码语言:javascript
复制
class UserListView(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = [filters.OrderingFilter]
    ordering_fields = ['username', 'email']
    ordering = ['username']

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/04/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、排序
    • 1.指定哪些字段可以排序
      • 2.所有字段都可排序
        • 3.默认排序
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档