网络编程
位置:首页>> 网络编程>> Python编程>> django rest framework使用django-filter用法

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)),
]

效果图

django rest framework使用django-filter用法

来源:https://blog.csdn.net/huyi91/article/details/77623709

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com