Vue + Django 2.0.6 学习笔记 5.11 过滤2 搜索 排序

先说过滤,过滤除了上一篇说的到内容还有这些:

from .models import Goods


class GoodsFilter(django_filters.rest_framework.FilterSet):
    """
    商品的过滤类
    """
    price_min = django_filters.NumberFilter(field_name='shop_price', lookup_expr='gte')
    price_max = django_filters.NumberFilter(field_name='shop_price', lookup_expr='lte')
# 这是部分匹配 不分大小写
    name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')


    class Meta:
        model = Goods
        fields = ['price_min','price_max', 'name']

除了大于小于还可以通过文字过滤 具体可参考官方文档

嗯。。好吧 官方文档大致浏览了下没找到 

直接看源码 发现:

原来这货直接调用forms的字段设置 那就参照forms的字段就完事了

 

如果要完全匹配搜索的话就不加lookup_expr

import django_filters

from django.db.models import Q

from .models import Goods


class GoodsFilter(django_filters.rest_framework.FilterSet):
    """
    商品的过滤类
    """
    price_min = django_filters.NumberFilter(field_name='shop_price', lookup_expr='gte')
    price_max = django_filters.NumberFilter(field_name='shop_price', lookup_expr='lte')
    # 这是全部匹配
    name = django_filters.CharFilter(field_name='name')


    class Meta:
        model = Goods
        fields = ['price_min','price_max', 'name']

效果

再说搜索功能:

官方文档

https://www.django-rest-framework.org/api-guide/filtering/#searchfilter

使用方法:

from rest_framework import filters

class GoodsListViewset(mixins.ListModelMixin, viewsets.GenericViewSet):
    """
    商品列表页,分页,过滤,搜索,排序
    """

    queryset = Goods.objects.all().order_by('id')
    serializer_class = GoodsSerializer
    pagination_class = GoodsPagination
# 添加搜索功能
    filter_backends = (DjangoFilterBackend,filters.SearchFilter)
# 设置好搜索涉及的字段
    search_fields = ('name', 'goods_brief', 'goods_desc')
    filter_class = GoodsFilter

效果

同时 搜索可以匹配正则

回头可以试试

最后说排序:

class GoodsListViewset(mixins.ListModelMixin, viewsets.GenericViewSet):
    """
    商品列表页,分页,过滤,搜索,排序
    """

    queryset = Goods.objects.all().order_by('id')
    serializer_class = GoodsSerializer
    pagination_class = GoodsPagination
# 这里 添加排序功能
    filter_backends = (DjangoFilterBackend,filters.SearchFilter, filters.OrderingFilter)
    search_fields = ('name', 'goods_brief', 'goods_desc')
# 这添加排序字段
    ordering_fields = ('sold_num', 'add_time')
    filter_class = GoodsFilter
# 如果需要自定义搜索和排序功能也是向上面过滤这样 没验证过 嘿嘿 具体看官方文档
    search_class = XXX
    ordering_class = XXX

https://www.django-rest-framework.org/api-guide/filtering/#orderingfilter

完结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@凌晨三点半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值