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 相关文章推荐
web.py在模板中输出美元符号的方法
Aug 26 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Java及python正则表达式详解
Dec 27 Python
Python装饰器用法示例小结
Feb 11 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
python制作mysql数据迁移脚本
Jan 01 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 Python
Python:Numpy 求平均向量的实例
Jun 29 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
Aug 02 Python
python基于win32api实现键盘输入
Dec 09 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 Python
Python3压缩和解压缩实现代码
Mar 01 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
UCenter 批量添加用户的php代码
2012/07/17 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
php实现word转html的方法
2016/01/22 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
动态加载iframe
2006/06/16 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
Django缓存Cache使用详解
2020/11/30 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
求职简历的自我评价怎样写好
2013/10/07 职场文书
餐饮投资计划书
2014/04/25 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers