DRF过滤类

2024-04-18 12:36
文章标签 过滤 drf

本文主要是介绍DRF过滤类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DRF过滤类

目录

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

OrderingFilter排序

DRF自带的排序类OrderingFilter

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

# 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才会生效`

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

SearchFilter过滤

过滤类和排序类不冲突

# 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

也可以多个字段模糊匹配

search_fields=['name','publish']

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

第三方过滤django-filter

安装第三方模块:

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

自定义过滤类

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

使用

# 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=北

这篇关于DRF过滤类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914803

相关文章

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

Java8特性:分组、提取字段、去重、过滤、差集、交集

总结下自己使用过的特性 将对象集合根据某个字段分组 //根据id分组Map<String, List<Bean>> newMap = successCf.stream().collect(Collectors.groupingBy(b -> b.getId().trim())); 获取对象集合里面的某个字段的集合 List<Bean> list = new ArrayList<>

【重学 MySQL】十五、过滤数据

【重学 MySQL】十五、过滤数据 基本用法使用`AND`、`OR`和`NOT`使用`IN`操作符使用`BETWEEN`操作符使用`LIKE`操作符使用`IS NULL`和`IS NOT NULL` 在MySQL中,过滤数据主要通过WHERE子句来实现。WHERE子句允许你指定条件来过滤从表中检索出来的行。只有当行满足WHERE子句中的条件时,这些行才会被包含在查询结果中。

数据预处理与协同过滤推荐算法——从数据清洗到个性化电影推荐

推荐系统在现代应用中占据了重要地位,尤其在电影、音乐等个性化内容推荐中广泛使用。本文将介绍如何使用数据预处理、特征工程以及多种推荐算法(包括协同过滤、基于内容的推荐、混合推荐等)来实现电影推荐系统。通过Pandas、Scikit-learn、TensorFlow等工具,我们将展示如何从数据清洗开始,逐步实现各类推荐算法。  完整项目代码: 基于协同过滤的电影推荐系统 一、数据预处

List对象过滤

List materialInventoryList = materialInventories.stream().filter(mat -> mat.getQty().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList()); stream().filter()方法可以过滤掉List的数据

使用 Lodash 提供的 isNil 和 omitBy 实现对象空属性的过滤

import { isNil, omitBy } from 'lodash-es'; 是一行 JavaScript 代码,用于从 lodash-es 库中导入两个函数:isNil 和 omitBy。以下是它们的作用: 1、isNil: 检查传入的值是否为 null 或 undefined。 isNil(null); // trueisNil(undefined); // trueis

读源码笔记--文件过滤驱动FileSpy第1篇 -- DriverEntry

今天只读FileSpy的DriverEntry,位于源文件:filespy.c。 // // 全局变量. // ULONG gFileSpyDebugLevel = DEFAULT_FILESPY_DEBUG_LEVEL; #if WINVER >= 0x0501 ULONG gFileSpyAttachMode = FILESPY_ATTACH_ALL_VOLUMES; #else ULON

【硬刚ES】ES入门 (13)Java API 操作(4)DQL(1) 请求体查询/term 查询,查询条件为关键字/分页查询/数据排序/过滤字段/Bool 查询/范围查询/模糊查询/高亮查询/聚合查

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。 1 请求体查询 2 高亮查询 3 聚合查询 package com.atguigu.es.test;import org.apache.http.HttpHost;import org.apache.lucene.search.TotalHits;import org.elasticse