额 我之前竟然把10-11都漏掉了 难怪我看视频看到6.5就开始一脸懵逼
继续
class GoodsListViewset(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
商品列表页.
"""serializer_class = GoodsSerializer
pagination_class = GoodsPagination# 也就这里的不同 将queryset那列放下来了 因为 GenericViewSet也是调用get_queryset函数来获取model的
def get_queryset(self):
return Goods.objects.filter(shop_price__gt = 100)
这样可以过滤商品价格大于100元的数据
但是这样写太死板 可以这样写
def get_queryset(self):
# 这个all()并不会获取大量数据 只是生成获取所有数据的sql命令 直到迭代的时候才会获取
queryset = Goods.objects.all()
# price_min是前端获取的字段
price_min = self.request.query_params.get('price_min', 0)
if price_min:
queryset = queryset.filter(shop_price__gt = int(price_min))return queryset
效果:
文章图片
更进一步 使用 filtering:
DjangoFilterBackend
SearchFilter
OrderingFilter
先安装 django-filter
然后添加
INSTALLED_APPS = ['django_filters']
views.py:
from django_filters.rest_framework import DjangoFilterBackendclass GoodsListViewset(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
商品列表页.
"""
# get_queryset函数就不用了
queryset = Goods.objects.all().order_by('id')
serializer_class = GoodsSerializer
pagination_class = GoodsPagination
filter_backends = (DjangoFilterBackend,)
filter_fields = ('name', 'shop_price')
效果:
文章图片
点击后:
文章图片
文章图片
如果此过滤功能不满足 可以自定义一个filter文件和类
这样就完成数据过滤的功能
# filter.pyimport django_filtersfrom django.db.models import Qfrom .models import Goods# Django2.0 的继承类
class GoodsFilter(django_filters.rest_framework.FilterSet):
"""
商品的过滤类
"""# 这里要注意 2.0之后改成了field_name 而不是name
price_min = django_filters.NumberFilter(field_name='shop_price', lookup_expr='gte')
price_max = django_filters.NumberFilter(field_name='shop_price', lookup_expr='lte')class Meta:
model = Goods
fields = ['price_min','price_max']#views.pyfrom .filters import GoodsFilterclass GoodsListViewset(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
商品列表页.
"""queryset = Goods.objects.all().order_by('id')
serializer_class = GoodsSerializer
pagination_class = GoodsPagination
filter_backends = (DjangoFilterBackend,)
filter_class = GoodsFilter
【Django|Vue+Django 2.0.6 学习笔记 5.10 drf过滤】完结
推荐阅读
- Django|Vue + Django 2.0.6 学习笔记 7.1 drf的token登录
- 数据服务|第四章(Django绑定数据库并发布数据-[基于Vue、Django、supermap iserver和gerapy的生态旅游web系统开发实例])
- 前端|8.Django怎样去调用漂亮的HTML前端页面()
- Python|Django学习笔记
- django|django - 云笔记项目-5-网站首页
- django|django - 云笔记项目-1
- python|游标的简单使用及案例【笔记二】
- Django|Python接口自动化测试系列[V1.0.0][加密接口]
- Django (一)-DRF(DjangoRESTframework)工程搭建