drf 过滤与排序
2020-11-01 21:22
1671 查看
django-filter
drf中如果想在
url中直接写过滤与排序,则需要安装第三方模块。
pip install django-filter
其次你需要将该模块注册进行
django配置文件中。
INSTALLED_APPS = [ 'rest_framework', 'django_filters', ]
准备工作
模型表
以下是一张书籍表和数据,我可能通过书名查,也可能通过价格查询。可能通过价格排序,也可能通过
id排序。
from django.db import models # Create your models here. class Book(models.Model): book_id = models.AutoField(primary_key=True) book_name = models.CharField(max_length=32) book_price = models.IntegerField()
序列类
采用模型序列类:
from rest_framework import serializers from app01.models import Book class BookModelSerializers(serializers.ModelSerializer): class Meta: model = Book fields = "__all__"
视图
采用
ListAPIView:
from rest_framework.generics import ListAPIView from app01.models import Book from app01.ser import BookModelSerializers class BookAPI(ListAPIView): queryset = Book.objects.all() serializer_class = BookModelSerializers
url
以下是
url的配置:
from django.contrib import admin from django.urls import path from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path('books/', views.BookAPI.as_view()), ]
过滤
局部配置
使用
filter_backends添加上过滤组件,并且使用
filter_fields指定可以过滤的字段。
from rest_framework.generics import ListAPIView from django_filters.rest_framework import DjangoFilterBackend # 导入过滤组件 from app01.models import Book from app01.ser import BookModelSerializers class BookAPI(ListAPIView): queryset = Book.objects.all() serializer_class = BookModelSerializers filter_backends = [DjangoFilterBackend] # 过滤组件导入 filter_fields = ("book_id","book_price") # 可以使用id过滤,也可以使用价格过滤 # http://127.0.0.1:8000/books/?book_price=128 只筛选出红楼梦 # 不支持大于、小于等操作
全局配置
全局配置:
REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',) }
排序
局部配置
使用
filter_backends添加上排序组件,并且使用
ordering_fields指定可以过滤的字段。
注意在请求时要用
ordering作为
key进行请求:
from rest_framework.generics import ListAPIView from rest_framework.filters import OrderingFilter # 导入排序 from app01.models import Book from app01.ser import BookModelSerializers class BookAPI(ListAPIView): queryset = Book.objects.all() serializer_class = BookModelSerializers filter_backends = [OrderingFilter] # 排序组件导入 ordering_fields = ("book_id","book_price") # 可以使用id排序,也可以使用价格排序 # http://127.0.0.1:8000/books/?ordering=-book_price 加了- 号代表降序 # http://127.0.0.1:8000/books/?ordering=-book_id
全局配置
全局配置:
REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.OrderingFilter',) }
相关文章推荐
- django drf (过滤、搜索、排序、分页)
- DRF内置过滤组件与排序组件结合使用
- SqlServer系列笔记——查询过滤分组排序
- ALV :汇总,分类汇总(小计),排序,过滤
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- DataView数据视图实现数据过滤,排序(代码调试通过)
- Android实现ListView的A-Z字母排序和过滤搜索功能
- SPGridView绑定数据(实现分页,排序,过滤,带菜单)
- lucene -- 3 排序、过滤、分词器
- 过滤和排序
- Mindscape WPF Elements使用教程:排序、过滤和分组
- elasticsearch geo_point 地理位置过滤 按经度排序
- 让Asp.Net WebAPI支持OData查询,排序,过滤。(转)
- 跟我学SharePoint 2013视频培训课程——排序、过滤在列表、库中的使用(10)
- 郭克华手机编程教学视频----我的练习源码(25)过滤及排序测试
- Android实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- 仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名,以及输入搜索条件过滤,显示姓名的文字图片
- Java之文件实用操作(过滤、树形显示、排序)
- Oracle起步学习(五)--过滤与排序