博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue + Django 2.0.6 学习笔记 5.11 过滤2 搜索 排序
阅读量:4127 次
发布时间:2019-05-25

本文共 2141 字,大约阅读时间需要 7 分钟。

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

from .models import Goodsclass 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_filtersfrom django.db.models import Qfrom .models import Goodsclass 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']

效果

再说搜索功能:

官方文档

使用方法:

from rest_framework import filtersclass 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

完结

转载地址:http://xnepi.baihongyu.com/

你可能感兴趣的文章
ES TCP客户端方式自动映射mapping写入异常
查看>>
ES自定义Analyzer扩展IK分词
查看>>
记录一次系统计算逻辑优化
查看>>
创建Spring Boot项目
查看>>
Spring Boot 扫描不到Controller
查看>>
MySQL 事务隔离级别相关官方文档翻译
查看>>
Eureka服务发现与注册
查看>>
事务隔离级别与脏读、不可重复读、幻读
查看>>
Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll
查看>>
Genymotion首次运行程序出现错误Installation error: INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
查看>>
以太坊不同客户端的定义和用途
查看>>
以太坊客户端mist和geth加快区块同步速度的方法
查看>>
TheDAO被攻击事件考察报告
查看>>
以太坊常用网址
查看>>
如何分叉以太坊并变成自己的私链?
查看>>
区块链开发(一)搭建基于以太坊的私有链环境
查看>>
BlockChain 与 Ethereum 介绍
查看>>
以太坊的POS共识机制(一)友善的小精灵 Casper
查看>>
[翻译]HyperLedger下一代总账架构提案
查看>>
区块链开发(七)从某保险积分案例谈区块链应用的风险与挑战
查看>>