django rest framework使用django-filter用法

所属分类: 脚本专栏 / python 阅读数: 1815
收藏 0 赞 0 分享

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用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Python3按一定数据位数格式处理bin文件的方法

今天小编就为大家分享一篇Python3按一定数据位数格式处理bin文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

对python pandas读取剪贴板内容的方法详解

今天小编就为大家分享一篇对python pandas读取剪贴板内容的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python中extend和append的区别讲解

今天小编就为大家分享一篇关于Python中extend和append的区别讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

python安装pywin32clipboard的操作方法

今天小编就为大家分享一篇python安装pywin32clipboard的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

几行Python代码爬取3000+上市公司的信息

今天小编就为大家分享一篇关于几行Python代码爬取3000+上市公司的信息,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Python实现查找二叉搜索树第k大的节点功能示例

这篇文章主要介绍了Python实现查找二叉搜索树第k大的节点功能,结合实例形式分析了Python二叉搜索树的定义、查找、遍历等相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Python微医挂号网医生数据抓取

今天小编就为大家分享一篇关于Python微医挂号网医生数据抓取,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

python+pyqt5实现KFC点餐收银系统

这篇文章主要为大家详细介绍了python+pyqt5实现KFC点餐收银系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

python用opencv批量截取图像指定区域的方法

今天小编就为大家分享一篇python用opencv批量截取图像指定区域的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python并发:多线程与多进程的详解

今天小编就为大家分享一篇关于Python并发:多线程与多进程的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享
查看更多