排序
在类视图中设置filter_backends
属性,使用rest_framework.filters.OrderingFilter
过滤器,DRF会在请求的查询字符串参数中检查是否包含了ordering参数,如果包含了ordering参数,则按照ordering参数指明的排序字段对数据集进行排序后展示。
from rest_framework.generics import ListAPIView
from rest_framework.filters import OrderingFilter
from app01.models import Book
from app01.serializer import BookSerializer
# # 排序组件使用
class Book2View(ListAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
filter_backends = [OrderingFilter]
ordering_fields = ('id' ,'price',) # # 指明按照'id'和'price'字段的值的大小对数据进行排序后展示
#urls.py
path('books2/', views.Book2View.as_view()),
#必须是ordering = 某个值
#http://127.0.0.1:8000/books2/?ordering=price
# 127.0.0.1:8000/books2/?ordering=-id
# -id 表示针对id字段进行倒序排序
# id 表示针对id字段进行升序排序
根据id
降序排序
如果需要过滤后在排序,则选哟过滤和排序两者结合使用
from rest_framework.generics import ListAPIView
from rest_framework.filters import OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
from app01.models import Book
from app01.serializer import BookSerializer
#views.py
class Book3View(ListAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
# 因为'filter_backends'是局部过滤配置,局部配置会覆盖'settinigs.py'文件中的全局配置,所以需要再次声明过滤组件核心类'DjangoFilterBackend',否则过滤功能会失效
filter_backends = [DjangoFilterBackend, OrderingFilter] # 在视图中加上该类,就可以
filterset_fields = ('name', 'price')
ordering_fields = ('id', 'price',)
#urls.py
path('books3/', views.Book3View.as_view()),
#http://127.0.0.1:8000/books3/?price=66&ordering=-id
#先过滤出价格为66的,再根据id字段降序排序
标签:ordering,rest,framework,使用,组件,import,排序,id
From: https://www.cnblogs.com/zaosong/p/16971303.html