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中的上下文管理器
Jun 28 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
Python测试人员需要掌握的知识
Feb 08 Python
Python常见内置高效率函数用法示例
Jul 31 Python
学生信息管理系统python版
Oct 17 Python
解决Python 使用h5py加载文件,看不到keys()的问题
Feb 08 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
django 数据库 get_or_create函数返回值是tuple的问题
May 15 Python
运行python提示no module named sklearn的解决方法
Nov 29 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
python glom模块的使用简介
Apr 13 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 页面编码声明方法详解(header或meta)
2010/03/12 PHP
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
php实现对象克隆的方法
2015/06/20 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python Mysql自动备份脚本
2008/07/14 Python
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
为什么是 Python -m
2020/06/19 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
医学护理毕业生自荐信
2013/11/07 职场文书
总经理助理的八要求
2013/11/12 职场文书
医学院学生的自我评价分享
2013/11/19 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
学校捐书活动总结
2015/05/08 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
vue+iview实现手机号分段输入框
2022/03/25 Vue.js