1.定义get_queryset()方法

from django.shortcuts import render

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework.parsers import JSONParser
from rest_framework import mixins, generics
from rest_framework.generics import ListAPIView
from rest_framework.pagination import PageNumberPagination
from goods.models import Goods, GoodsCategory
from goods.serializer import GoodsSerializer, CategorySerializer
from rest_framework import viewsets
from django_filters.rest_framework import DjangoFilterBackend class GoodsList(mixins.ListModelMixin, viewsets.GenericViewSet):
class GoodsPagination(PageNumberPagination):
page_size = 2
page_size_query_param = 'pageSize'
page_query_param = 'p'
max_page_size = 100 # queryset = Goods.objects.all() # 不能切片后再过滤,例如:Goods.objects.all()[:10]
serializer_class = GoodsSerializer
pagination_class = GoodsPagination # 过滤方法1
# 使用此方法,不使用queryset时,须在urls.router中指定base_name参数
def get_queryset(self):
queryset = Goods.objects.all() #此时并没有取出数据
price_min = self.request.query_params.get('price_min',0)
if price_min:
queryset = queryset.filter(shop_price__gt=int(price_min))
return queryset

须在urls中指定base_name

router = DefaultRouter()
router.register('goods',GoodsList,base_name='a')

test

2.django-filter

安装步骤相见文档https://django-filter.readthedocs.io/en/master/guide/install.html

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

View中代码

from django.shortcuts import render

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework.parsers import JSONParser
from rest_framework import mixins, generics
from rest_framework.generics import ListAPIView
from rest_framework.pagination import PageNumberPagination
from goods.models import Goods, GoodsCategory
from goods.serializer import GoodsSerializer, CategorySerializer
from rest_framework import viewsets
from django_filters.rest_framework import DjangoFilterBackend class GoodsList(mixins.ListModelMixin, viewsets.GenericViewSet):
class GoodsPagination(PageNumberPagination):
page_size = 2
page_size_query_param = 'pageSize'
page_query_param = 'p'
max_page_size = 100 queryset = Goods.objects.all() # 不能切片后再过滤,例如:Goods.objects.all()[:10]
serializer_class = GoodsSerializer
pagination_class = GoodsPagination
filter_backends = (DjangoFilterBackend,)
filter_fields = ('name',) #逗号必加,缺点无法模糊查询

test

3.自定义filter

from django.shortcuts import render

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework.parsers import JSONParser
from rest_framework import mixins, generics
from rest_framework.generics import ListAPIView
from rest_framework.pagination import PageNumberPagination
from goods.models import Goods, GoodsCategory
from goods.serializer import GoodsSerializer, CategorySerializer
from rest_framework import viewsets
from django_filters.rest_framework import DjangoFilterBackend import django_filters
class GoodsFilter(django_filters.rest_framework.FilterSet):
max_price = django_filters.rest_framework.NumberFilter(field_name='shop_price',lookup_expr='lte')
min_price = django_filters.rest_framework.NumberFilter(field_name='shop_price',lookup_expr='gte') class Meta:
model = Goods
fields = ['min_price','max_price'] class GoodsList(mixins.ListModelMixin, viewsets.GenericViewSet):
class GoodsPagination(PageNumberPagination):
page_size = 2
page_size_query_param = 'pageSize'
page_query_param = 'p'
max_page_size = 100 queryset = Goods.objects.all() # 不能切片后再过滤,例如:Goods.objects.all()[:10]
serializer_class = GoodsSerializer
pagination_class = GoodsPagination
filter_backends = (DjangoFilterBackend,)
# filter_fields = ('name',) #逗号必加,缺点无法模糊查询
filterset_class = GoodsFilter

test

最新文章

  1. Struts2学习笔记 - HelloWorld总结
  2. CSS 魔法系列:纯 CSS 绘制各种图形《系列五》
  3. 大数据之Ganglia
  4. Hadoop伪分布式配置:CentOS6.5(64)+JDK1.7+hadoop2.7.2
  5. redux-actions源码解读
  6. MSAA, UIA brief explanation
  7. linux 查看当前路径命令:pwd
  8. 聚焦设计交易与商业落地 DANG·DHUB设计师平台上线【图】_品牌资讯_服饰_太平洋时尚网
  9. .idata数据的解析
  10. JS——基础知识(三)
  11. [随笔]利用云虚拟机和学校VPN实现校外访问校内站点(反向代理)
  12. AngularJS2基本构造
  13. 一个巨low的“2048”
  14. STL字符串常用方法扩展
  15. uninitialized_copy()效果试验
  16. 1024 Python 要诀
  17. linux下创建密钥
  18. 【微服务No.3】AOP组件ASPectCore简单使用
  19. canvas 实现掉落效果
  20. 距离LCA离线算法Tarjan + dfs + 并查集

热门文章

  1. Oracle在linux中相关设置操作
  2. rtmp一些状态信息详解-as连接FMS服务器报错状态汇总~~
  3. Adjacent Bit Counts(uvalive)
  4. 【308】Python os.path 模块常用方法
  5. IDEA2017 破解方式
  6. 编译boost.log模块遇到的一些问题
  7. Elasticsearch 全字段搜索_all,query_string查询,不进行分词
  8. MySQL数据库篇之表的增删改查
  9. VSS/RSS/PSS/USS
  10. 以二进制的形式查看文件 Linux之od命令详解