DRF过滤类

devtools/2024/9/23 5:58:02/

DRF过滤类

目录

    • DRF过滤类
    • OrderingFilter排序
    • SearchFilter过滤
    • 第三方过滤`django-filter`
    • 自定义过滤类
    • 使用

OrderingFilter排序

DRF自带的排序类OrderingFilter

必须是继承 GenericAPIView 的视图类才能调用,继承APIView时不能这么配置

python"># views.py
from rest_framework.filters import OrderingFilterclass publish(GenericViewSet, ListModelMixin):filter_backends = [OrderingFilter]

此时前端请求也要改变

  • 根据id排序:

http://127.0.0.1:8000/publish/?ordering=id

  • 根据id倒序排序:

http://127.0.0.1:8000/publish/?ordering=-id

如果重写了list方法则该方法不生效,只有用父类的list才会生效`

python">res = super().list(request, *args, **kwargs)

SearchFilter过滤

过滤类和排序类不冲突

python"># views.py
from rest_framework.filters import OrderingFilter, SearchFilter class publish(GenericViewSet, ListModelMixin):queryset = models.Publish.objects.all()serializer_class = PublishSerializerfilter_backends = [OrderingFilter, SearchFilter]search_fields = ['name']

此时前端请求也要改

查找name中带’北’的数据:

http://127.0.0.1:8000/publish/?search=北

image-20240417224049848

也可以多个字段模糊匹配

python">search_fields=['name','publish']

此时?search='北'会查找name和publish字段中都包含的数据

djangofilter_64">第三方过滤django-filter

安装第三方模块:

python">pip3 install django-filter
python">class BookListView(GenericViewSet, ListModelMixin):# 第三方过滤类filter_backends = [DjangoFilterBackend]filterset_fields = ['price', 'name']http://127.0.0.1:8008/publish/?price=66&name=

自定义过滤类

python">from rest_framework.filters import BaseFilterBackendclass CommonFilter(BaseFilterBackend):def filter_queryset(self, request, queryset, view):# 完成过滤,返回 qs对象# http://127.0.0.1:8000/publish/?name=北name = request.query_params.get('name', None)if name:queryset = queryset.filter(name__contains=name)return queryset

使用

python"># views.py
from app.MyFilter import CommonFilterclass publish(GenericViewSet, ListModelMixin):queryset = models.Publish.objects.all()serializer_class = PublishSerializer# 使用自定义的类filter_backends = [CommonFilter]search_fields = ['name']

前端传入

http://127.0.0.1:8000/publish/?name=北


http://www.ppmy.cn/devtools/7364.html

相关文章

网络初识

网络 局域网 一个区域的网 广域网 相对概念,没有绝对的界限,全世界现在最大的广域网,就教做TheInternet,万维网 路由器 交换机和路由器,都是用来组建网络的重要设备 交换机 上网的设备(电脑/手…

常用node.js命令有哪些呢?

前言 Node.js 是一种在服务器端运行 JavaScript 的开放源代码、跨平台 JavaScript 运行环境。 1、查看当前安装的 Node.js 版本。 node -v 或 node --version 2、查看当前安装的 npm 版本。 npm -v 或 npm --version 3、初始化一个新的 Node.js 项目,会生成一个 pac…

pyqt和opencv结合01:读取图像、显示

在这里插入图片描述 1 、opencv读取图像用于pyqt显示 # image cv2.imread(file_path)image cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 将图像转换为 Qt 可接受的格式height, width, channel image.shapebytes_per_line 3 * widthq_image QImage(image.data, width, hei…

MySQL内置函数

📟作者主页:慢热的陕西人 🌴专栏链接:MySQL 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容涉及了MySQL中的内置函数 文章目录 MySQL内置函数1.日期…

深入浅出Python机器学习:从零开始的SVM教程/厾罗

导言: 在众多机器学习算法中,支持向量机(Support Vector Machine, SVM)以其强大的分类能力和理论背景受到了广泛的应用。SVM不仅在学术领域表现出色,而且在工业界也有着极高的声誉。本文将带领大家从零开始&#xff0…

B树和B+树试题解析

一、单项选择题 01.下图所示是一棵(A ). A.4阶B树 B.3阶B树 C.4阶B树 D.无法确定 02.下列关于m阶B树的说法中,错误的是( C ). A.根结点至多有m棵子树 B.所有叶结点都在同一层次上 C.非叶结点至…

【Android GUI】FramebufferNativeWindow与Surface

文章目录 显示整体体系FramebufferNativeWindowFramebufferNativeWindow构造函数 dequeueBufferSurface总结参考 显示整体体系 native window为OpenGL与本地窗口系统之间搭建了桥梁。 这个窗口系统中,有两类本地窗口,nativewindow1是能直接显示在屏幕的…

Mysql The last packet sent successfully to the server was 0 milliseconds ago.

项目启动后,报错,但是我的navicat 数据库连接工具是连接上的,没有问题的,但是程序就是连接不上。端口放开了,防火墙也放开了 先说问题:是网络问题, 如何解决:因为我的机子上又跑了…