zoukankan      html  css  js  c++  java
  • Django Restframework 过滤器

    一、基本配置:

      1、安装:pip install django-filter

      2、将 django_filters 配置到INSTALLED-APPS中

      3、对 REST_FRAMEWORK 配置:

        REST_FRAMEWORK = {

          "DEFAULT_FILTER_BACKENDS":("django_filters.rest_framework.DjangoFilterBackend",)

        }

    二、基本过滤器的使用

      from django_filters.rest_framework.DjangoFilterBackend

      在对应的View中添加配置

      class GoodLists(mixins.ListModelMixin, viewset.GenericViewSet):

        ...

        # 使用过滤器

        filter_backends = (DjangoFilterBackend,)

        # 定义需要过滤的字段

        filter_fields = ("name", "price")

    三、自定义过滤器

      1、创建一个filter.py文件

      import django_filters

      from django.db.models import Q

      from .model import Goods

      class GoodsFilter(django_filters.rest_framework.FilterSet):

        pricemin = django_filters.NumberFilter(name = "shop_price", lookup_expr = "gte")

        pricemax = django_fliters.NumberFilter(name = "shop_price", lookup_expr = "lte")

        name = django_filters.CharFilter(name = "name", lookup_expr = "icontains")

        top_category = django_fllters.NumberFilter(name = "category", method = "get_top_category")

        def get_top_category(self, queryset, name, value):

          return queryset.filter(Q(category_id = value) | Q(category_parent_category_id = value))

      

        class Meta:

          model = Goods

          fields = ["pricemin", "pricemax", "name"]

        

      2、在视图中使用自定义过滤器

        from .filter import GoodsFilter

        class GoodLists(mixins.ListModelMixin, viewsets.GenericViewSet):

          ...

          filter_backends = (DjangoFilterBackends, filter.SearchFilter, filter.OrderingFilter)  # SearchFilter:搜索过滤器,OrderingFilter:排序过滤器

          filter_fields = ("name", "shop_price")

          # 自定义过滤器的使用

          filter_class = GoodsFilter

          search_fields = ("name", "good_brief")  # 搜索的内容包含在name中,或者包含在商品描述中

          ordering_fields = ("sold_num", "shop_price") # 排序

  • 相关阅读:
    Markdown自动生成目录
    defer使用小结
    RESTful API设计的点
    总结下数据库的命名规范
    go module学习笔记
    golang环境安装和配置
    jenkins环境搭建&配置(二)
    mac环境搭建selenium
    sed命令
    测试工作遇到的自动补0
  • 原文地址:https://www.cnblogs.com/fiona-zhong/p/9946016.html
Copyright © 2011-2022 走看看