django rest framework使用django-filter用法


Posted in Python onJuly 15, 2020

django rest framework使用django-filter注意事项:

一定要在setting文件里面加载如下代码,而不是只安装包,否则django应用不报错,但是不能正确过滤。

“`
INSTALLED_APPS = [
‘django_filters'
]

REST_FRAMEWORK = {
‘DEFAULT_FILTER_BACKENDS': ( ‘django_filters.rest_framework.DjangoFilterBackend',
),
}

补充知识:rest_framework--filters和django-filters混合使用-过滤搜索

view

from rest_framework.pagination import PageNumberPagination
from rest_framework import mixins
from rest_framework import viewsets
from rest_framework import filters

from django_filters.rest_framework import DjangoFilterBackend

from .models import Goods
from .serializers import GoodsSerializer
# 导入过滤器类
from .filters import GoodsFilter

class GoodsPagination(PageNumberPagination):
  page_size = 10
  page_size_query_param = "page_size"
  page_query_param = "p"
  max_page_size = 100

class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
  # 指定queryset
  queryset = Goods.objects.all()

  # 指定序列化类
  serializer_class = GoodsSerializer

  # 指定分页类
  pagination_class = GoodsPagination

  # 添加过滤器 这里可以吧django-filter过滤器添加进来 和 rest_framework的filters添加进来一起用, 也可以单个用, 看你的需求
  filter_backends = [DjangoFilterBackend, filters.SearchFilter]

  # 只需要简单的基于等同的过滤,则可以filter_fields在视图或视图集上设置属性,列出要过滤的字段集。
  # 等同就是根据你过滤的字段的数据必须跟数据库里那个字段的数据相同
  # filter_fields = ['name', 'shop_price']

  # 指定过滤器类
  filter_class = GoodsFilter

  search_fields = ['name', 'goods_brief', "goods_desc"]

过滤器类?根据自己需求定义

import django_filters

from .models import Goods

class GoodsFilter(django_filters.rest_framework.FilterSet):
  """
  商品的过滤类
  """

  # 大于这个值 name指定字段 lookup_expr过滤条件
  # NumberFilter 数字类型
  price_min = django_filters.NumberFilter(name="shop_price", lookup_expr="gte")
  # 小于这个值
  price_max = django_filters.NumberFilter(name="shop_price", lookup_expr="lte")

  # name模糊查询, 不指定过滤条件, 必须全部匹配
  # CharFilter字符串类型
  name = django_filters.CharFilter(name="name", lookup_expr="icontains")

  class Meta:
    # 指定模型类
    model = Goods
    # 显示这两个字段
    fields = ["price_min", "price_max", "name"]

settings

INSTALLED_APPS = [
  # drf过滤器 也 是xadmin的过滤器
  'django_filters',
  'rest_framework',
]

url

from django.conf.urls import url, include

from rest_framework.routers import DefaultRouter

from goods.views import GoodsListViewSet
# 生成一个注册器实例对象
router = DefaultRouter()
# 将需要自动生成url的接口注册
# 配置goods的url
router.register(r'goods', GoodsListViewSet, base_name="goods-list")

urlpatterns = [
  # 自动生成url
  url(r"^", include(router.urls)),
]

效果图

django rest framework使用django-filter用法

以上这篇django rest framework使用django-filter用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
Python中shape计算矩阵的方法示例
Apr 21 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
python路径的写法及目录的获取方式
Dec 26 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
keras 简单 lstm实例(基于one-hot编码)
Jul 02 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 Python
Django REST 异常处理详解
Jul 15 #Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 #Python
django restframework serializer 增加自定义字段操作
Jul 15 #Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 #Python
浅析Python 条件控制语句
Jul 15 #Python
python中如何设置代码自动提示
Jul 15 #Python
PyTorch实现重写/改写Dataset并载入Dataloader
Jul 14 #Python
You might like
PHP脚本的10个技巧(4)
2006/10/09 PHP
PHP脚本的10个技巧(7)
2006/10/09 PHP
PHP 文件类型判断代码
2009/03/13 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
用js解决数字不能换行问题
2010/08/10 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
python与php实现分割文件代码
2017/03/06 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
django2笔记之路由path语法的实现
2019/07/17 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
ASP.NET Core中的配置详解
2021/02/05 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
汉语专业应届生求职信
2013/10/01 职场文书
年终晚会主持词
2014/03/25 职场文书
环保标语大全
2014/06/12 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
春季运动会开幕词
2015/01/28 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js