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

一身转战三千里,一剑曾百万师。这篇文章主要讲述#私藏项目实操分享#愚公系列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框架之排序】该属性可以是字符串,也可以是字符串的列表/元组。

    推荐阅读