django rest framework使用django-filter用法
作者:子如川 发布时间:2023-03-06 01:56:06
标签:django,rest,framework,filter
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)),
]
效果图
来源:https://blog.csdn.net/huyi91/article/details/77623709


猜你喜欢
- 1.前期准备1.打开Terminal终端,执行以下命令,将项目所需要的依赖包,都记录到一个文件内备用。pip freeze >requ
- 方法一、简单安装(通过yum)1.安装epel-releaserpm -ivh http://dl.fedoraproject.
- 一、概述PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却
- Array.prototype._ = function(){var _p = 0;var _v = 0;(function(){ 
- MySQL、SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL语句。不过,你可以利用
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 18 - Classes part IClass(
- 打开VB6,新建ActiveX DLL 2、在工程引用中加入Microsoft Active Server Pages Object Lib
- Python被誉为全世界高效的编程语言,同时也被称作是“胶水语言”,那它为何能如此受欢迎,下面我们就来说说Python入门学习的必备11个知
- python爬虫遇到爬取文件内容时,需要一页页的翻页爬取,这样很是麻烦,其实可以获取每个列表信息下的文件名和文件链接,让文件名和文件链接处理
- Python 条件语句Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。可以通过下图来简单了解
- selenium IDE是干什么的Selenium IDE 是一个简单的录制回放工具,它可以录制你在浏览器上的操作,回放脚本时
- 我听说在ASP里,可以不用DSN来连接EXCEL,请问如何实现?确实ASP提供了替代DSN的其他方法,甚至可以在运行时建立连接看看下面的范例
- golang切片和数组拷贝基础Go 语言里面变量有两类,一类是值类型,一类是引用类型。在 Go 语言中:string、int、bool、fl
- 什么是可变/不可变对象不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份
- 什么是Firebug从事了数年的Web开发工作,越来越觉得现在对WEB开发有了更高的要求。要写出漂亮的HTML代码;要编写精致的CSS样式表
- 本文实例讲述了Python使用random模块生成随机数操作。分享给大家供大家参考,具体如下:今天在用Python编写一个小程序时,要用到随
- 运行效果:完整代码from tkinter import *import tkinter.messageboximport base64fr
- 看书笔记db file scattered read DB ,db file sequential read DB,free buffer
- var str='1250' ; alert( Number(str) ); //得到1250 alert(parseInt
- Python中的五种特性:切片,迭代,列表生成式,生成器,迭代器。切片切片就相当于其他语言中的截断函数,取部分指定元素用的。L = list