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 相关文章推荐
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
详细解读tornado协程(coroutine)原理
Jan 15 Python
Python实现将json文件中向量写入Excel的方法
Mar 26 Python
关于python2 csv写入空白行的问题
Jun 22 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
Jul 03 Python
Python内存管理实例分析
Jul 10 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
Jul 22 Python
jupyter notebook的安装与使用详解
May 18 Python
Python学习之os模块及用法
Jun 03 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 Python
使用pycharm运行flask应用程序的详细教程
Jun 07 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 array_search() 函数使用
2010/04/13 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
js实现延时加载Flash的方法
2015/11/26 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
react基本安装与测试示例
2020/04/27 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
Atom的python插件和常用插件说明
2018/07/08 Python
Python实现的json文件读取及中文乱码显示问题解决方法
2018/08/06 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
人力资源总监工作说明
2014/03/03 职场文书
开业典礼主持词
2014/03/21 职场文书
大学生实训报告总结
2014/11/05 职场文书
歼十出击观后感
2015/06/11 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript