码迷,mamicode.com
首页 > 其他好文 > 详细

Django Restframework 过滤器

时间:2018-11-12 14:48:13      阅读:404      评论:0      收藏:0      [点我收藏+]

标签:sts   过滤   number   imp   contain   django   ber   字段   ring   

一、基本配置:

  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") # 排序

 

Django Restframework 过滤器

标签:sts   过滤   number   imp   contain   django   ber   字段   ring   

原文地址:https://www.cnblogs.com/fiona-zhong/p/9946016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!