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相关推荐

  1. [Django] drf filter过滤

    文章目录 自定义过滤方法 时间字段范围过滤 外键关联方向过滤 过滤 lookup_expr判断条件可选参数 自定义过滤方法 import django_filtersfrom household_re ...

  2. 快速上手Django(六) -Django之Django drf 序列化器Serializer类

    文章目录 快速上手Django(六) -Django之Django drf 序列化器Serializer类 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSeria ...

  3. Django 基础(13)-Django drf 序列化器类to_representation和to_internal_value(处理返回的日期格式)、序列化类 ModelSerializer

    文章目录 一.Django drf 序列化 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSerializer 5. DRF序列化器to_representatio ...

  4. Django DRF API

    Django 基本使用 前后端分离开发模式 1.1 前后端分离前 1.2 前后端分离前存在的一些问题 • PC.APP.Pad等多端流行 • 前后端开发职责不清晰:各司其职,最大程度减少开发难度,方便 ...

  5. Django DRF 两种接口安全机制及其配置

    Django DRF 两种接口安全机制及其配置 接口安全机制,用于设置和管理用户调用接口时的权限问题.此处介绍最常用的两种接口安全机制及其配置. 1 使用之前 先生成接口文档 便于测试 1.1 安装依 ...

  6. Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器

    文章目录 Django drf 分页查询(批量查询) PageNumberPagination:普通分页 Django 自定义分页器 自定义批量查询的返回结构 LimitOffsetPaginatio ...

  7. Django + DRF + Elasticsearch 实现搜索功能

    django使用haystack来调用Elasticsearch搜索引擎 如何使用django来调用Elasticsearch实现全文的搜索 Haystack为Django提供了模块化的搜索.它的特点 ...

  8. Django DRF 序列化类

    文章目录 1. 序列化类 Serializer 1.1 Serializer 基本使用 1.2 定义序列化类 1.3 创建 Serializer 对象 1.4 序列化 1.5 反序列化 1.6 钩子函 ...

  9. django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct

    2019独角兽企业重金招聘Python工程师标准>>> 1.多表连接查询:当我知道这点的时候顿时觉得django太NX了.   class A(models.Model):      ...

最新文章

  1. 火狐拓展开发 基础知识
  2. R语言字符串处理函数
  3. 图神经网络GNN预训练技术进展概述
  4. 博易大师 行情服务器文件,博易大师目录
  5. MVVMLight 实现指定Frame控件的导航
  6. 【收藏】Geomesa(三)图层的裁剪分析
  7. boost::log::sources::severity_channel_logger_mt用法的测试程序
  8. Delphi 计算儒略日(Julian day)的代码
  9. SAP Spartacus的版本机制
  10. Sparse Feature Learning
  11. Wildfly Swarm,朝着成熟和一小部分贡献
  12. STM32H743+CubeMX-定时器TIM输出PWM(Out Compare模式) + 中断
  13. Hadoop单机模式安装入门(Ubuntu系统)
  14. 乐高科技系列搭建指南 pdf_玩转乐高创意亲子搭建系列(4)小颗粒作品
  15. window tomcat 端口冲突问题解决
  16. python的简单GUI(登录窗口)
  17. linux工作技能第二发:vi
  18. 【正点原子STM32连载】第三十七章 触摸屏实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  19. 打造黑苹果(二)制作黑mac系统安装U盘
  20. 克拉克变换(Clarke Transformation)

热门文章

  1. 【GVA】gorm多对多many2many删除数据的同时级联删除关联中间表中的关联数据
  2. 【收藏】GeoMesa Spark
  3. harbor镜像清理:使用registry:2.6.2-photon garbage-collect
  4. spark rdd reduceByKey示例
  5. Corodva Could not resolve com.android.tools.build:gradle:3.0.1 解决方法
  6. JVM调优:对象进入老年代的两个条件
  7. kibana操作elasticsearch:match匹配查询(最小匹配参数查询)
  8. php点菜系统开题报告,点餐管理系统的设计与实现-开题报告
  9. Java中外部类访问内部类的方法
  10. 张秋余---经典语录