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抓取网页图片示例(python爬虫)
Apr 27 Python
Python进程通信之匿名管道实例讲解
Apr 11 Python
Python pickle模块用法实例分析
May 27 Python
Python切片知识解析
Mar 06 Python
Python 模拟员工信息数据库操作的实例
Oct 23 Python
python实现人脸识别代码
Nov 08 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
tensorboard显示空白的解决
Feb 15 Python
Python基于Socket实现简单聊天室
Feb 17 Python
Python基于正则表达式实现计算器功能
Jul 13 Python
python3.5的包存放的具体路径
Aug 16 Python
python用字节处理文件实例讲解
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 - Html Transfer Code
2006/10/09 PHP
php4的session功能评述(二)
2006/10/09 PHP
解析php如何将日志写进syslog
2013/06/28 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
不安全的常用的js写法
2009/09/15 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
js中split()方法得到的数组长度问题
2018/07/19 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
Python单元测试框架unittest简明使用实例
2015/04/13 Python
Python版微信红包分配算法
2015/05/04 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
python 处理string到hex脚本的方法
2018/10/26 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
python实现的自动发送消息功能详解
2019/08/15 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
基层干部个人对照检查及整改措施
2014/10/28 职场文书
体育活动总结
2015/02/04 职场文书
导游词400字
2015/02/13 职场文书
新店开张宣传语
2015/07/13 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
用JS写一个发布订阅模式
2021/11/07 Javascript
MySQL分区以及建索引的方法总结
2022/04/13 MySQL