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代码的打包与发布详解
Jul 30 Python
编写Python的web框架中的Model的教程
Apr 29 Python
学习python类方法与对象方法
Mar 15 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
Mar 21 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
解决Python pandas plot输出图形中显示中文乱码问题
Dec 12 Python
Python自动抢红包教程详解
Jun 11 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
python中加背景音乐如何操作
Jul 19 Python
Python3爬虫发送请求的知识点实例
Jul 30 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 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
mysql 搜索之简单应用
2007/04/27 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python列表解析配合if else的方法
2018/06/23 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
Django model select的多种用法详解
2019/07/16 Python
python配置文件写入过程详解
2019/10/19 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
印尼旅游网站:via
2017/11/12 全球购物
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
金鑫耀Java笔试题
2014/09/06 面试题
酒店优秀员工事迹材料
2014/06/02 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript