django drf Filter
1.定义get_queryset()方法
from django.shortcuts import renderfrom rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from rest_framework.parsers import JSONParser from rest_framework import mixins, generics from rest_framework.generics import ListAPIView from rest_framework.pagination import PageNumberPagination from goods.models import Goods, GoodsCategory from goods.serializer import GoodsSerializer, CategorySerializer from rest_framework import viewsets from django_filters.rest_framework import DjangoFilterBackendclass GoodsList(mixins.ListModelMixin, viewsets.GenericViewSet):class GoodsPagination(PageNumberPagination):page_size = 2page_size_query_param = 'pageSize'page_query_param = 'p'max_page_size = 100# queryset = Goods.objects.all() # 不能切片后再过滤,例如:Goods.objects.all()[:10]serializer_class = GoodsSerializerpagination_class = GoodsPagination# 过滤方法1# 使用此方法,不使用queryset时,须在urls.router中指定base_name参数def get_queryset(self):queryset = Goods.objects.all() #此时并没有取出数据price_min = self.request.query_params.get('price_min',0)if price_min:queryset = queryset.filter(shop_price__gt=int(price_min))return queryset
须在urls中指定base_name
router = DefaultRouter() router.register('goods',GoodsList,base_name='a')
test
2.django-filter
安装步骤相见文档https://django-filter.readthedocs.io/en/master/guide/install.html
https://www.django-rest-framework.org/api-guide/filtering/#djangofilterbackend
View中代码
from django.shortcuts import renderfrom rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from rest_framework.parsers import JSONParser from rest_framework import mixins, generics from rest_framework.generics import ListAPIView from rest_framework.pagination import PageNumberPagination from goods.models import Goods, GoodsCategory from goods.serializer import GoodsSerializer, CategorySerializer from rest_framework import viewsets from django_filters.rest_framework import DjangoFilterBackendclass GoodsList(mixins.ListModelMixin, viewsets.GenericViewSet):class GoodsPagination(PageNumberPagination):page_size = 2page_size_query_param = 'pageSize'page_query_param = 'p'max_page_size = 100queryset = Goods.objects.all() # 不能切片后再过滤,例如:Goods.objects.all()[:10]serializer_class = GoodsSerializerpagination_class = GoodsPaginationfilter_backends = (DjangoFilterBackend,)filter_fields = ('name',) #逗号必加,缺点无法模糊查询
test
3.自定义filter
from django.shortcuts import renderfrom rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from rest_framework.parsers import JSONParser from rest_framework import mixins, generics from rest_framework.generics import ListAPIView from rest_framework.pagination import PageNumberPagination from goods.models import Goods, GoodsCategory from goods.serializer import GoodsSerializer, CategorySerializer from rest_framework import viewsets from django_filters.rest_framework import DjangoFilterBackendimport django_filters class GoodsFilter(django_filters.rest_framework.FilterSet):max_price = django_filters.rest_framework.NumberFilter(field_name='shop_price',lookup_expr='lte')min_price = django_filters.rest_framework.NumberFilter(field_name='shop_price',lookup_expr='gte')class Meta:model = Goodsfields = ['min_price','max_price']class GoodsList(mixins.ListModelMixin, viewsets.GenericViewSet):class GoodsPagination(PageNumberPagination):page_size = 2page_size_query_param = 'pageSize'page_query_param = 'p'max_page_size = 100queryset = Goods.objects.all() # 不能切片后再过滤,例如:Goods.objects.all()[:10]serializer_class = GoodsSerializerpagination_class = GoodsPaginationfilter_backends = (DjangoFilterBackend,)# filter_fields = ('name',) #逗号必加,缺点无法模糊查询filterset_class = GoodsFilter
test
转载于:https://www.cnblogs.com/chenyishi/p/10656604.html
django drf Filter相关推荐
- [Django] drf filter过滤
文章目录 自定义过滤方法 时间字段范围过滤 外键关联方向过滤 过滤 lookup_expr判断条件可选参数 自定义过滤方法 import django_filtersfrom household_re ...
- 快速上手Django(六) -Django之Django drf 序列化器Serializer类
文章目录 快速上手Django(六) -Django之Django drf 序列化器Serializer类 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSeria ...
- Django 基础(13)-Django drf 序列化器类to_representation和to_internal_value(处理返回的日期格式)、序列化类 ModelSerializer
文章目录 一.Django drf 序列化 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSerializer 5. DRF序列化器to_representatio ...
- Django DRF API
Django 基本使用 前后端分离开发模式 1.1 前后端分离前 1.2 前后端分离前存在的一些问题 • PC.APP.Pad等多端流行 • 前后端开发职责不清晰:各司其职,最大程度减少开发难度,方便 ...
- Django DRF 两种接口安全机制及其配置
Django DRF 两种接口安全机制及其配置 接口安全机制,用于设置和管理用户调用接口时的权限问题.此处介绍最常用的两种接口安全机制及其配置. 1 使用之前 先生成接口文档 便于测试 1.1 安装依 ...
- Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器
文章目录 Django drf 分页查询(批量查询) PageNumberPagination:普通分页 Django 自定义分页器 自定义批量查询的返回结构 LimitOffsetPaginatio ...
- Django + DRF + Elasticsearch 实现搜索功能
django使用haystack来调用Elasticsearch搜索引擎 如何使用django来调用Elasticsearch实现全文的搜索 Haystack为Django提供了模块化的搜索.它的特点 ...
- Django DRF 序列化类
文章目录 1. 序列化类 Serializer 1.1 Serializer 基本使用 1.2 定义序列化类 1.3 创建 Serializer 对象 1.4 序列化 1.5 反序列化 1.6 钩子函 ...
- django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
2019独角兽企业重金招聘Python工程师标准>>> 1.多表连接查询:当我知道这点的时候顿时觉得django太NX了. class A(models.Model): ...
最新文章
- 火狐拓展开发 基础知识
- R语言字符串处理函数
- 图神经网络GNN预训练技术进展概述
- 博易大师 行情服务器文件,博易大师目录
- MVVMLight 实现指定Frame控件的导航
- 【收藏】Geomesa(三)图层的裁剪分析
- boost::log::sources::severity_channel_logger_mt用法的测试程序
- Delphi 计算儒略日(Julian day)的代码
- SAP Spartacus的版本机制
- Sparse Feature Learning
- Wildfly Swarm,朝着成熟和一小部分贡献
- STM32H743+CubeMX-定时器TIM输出PWM(Out Compare模式) + 中断
- Hadoop单机模式安装入门(Ubuntu系统)
- 乐高科技系列搭建指南 pdf_玩转乐高创意亲子搭建系列(4)小颗粒作品
- window tomcat 端口冲突问题解决
- python的简单GUI(登录窗口)
- linux工作技能第二发:vi
- 【正点原子STM32连载】第三十七章 触摸屏实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
- 打造黑苹果(二)制作黑mac系统安装U盘
- 克拉克变换(Clarke Transformation)
热门文章
- 【GVA】gorm多对多many2many删除数据的同时级联删除关联中间表中的关联数据
- 【收藏】GeoMesa Spark
- harbor镜像清理:使用registry:2.6.2-photon garbage-collect
- spark rdd reduceByKey示例
- Corodva Could not resolve com.android.tools.build:gradle:3.0.1 解决方法
- JVM调优:对象进入老年代的两个条件
- kibana操作elasticsearch:match匹配查询(最小匹配参数查询)
- php点菜系统开题报告,点餐管理系统的设计与实现-开题报告
- Java中外部类访问内部类的方法
- 张秋余---经典语录