Django_restframework

Django_restframework中的view的继承关系

GenericViewSet(viewset) -drf
    GenericAPIView      -drf
        APIView         -drf
            View        -django

Mixins

CreateModelMixin(object)
ListModelMinxin(object)
RetreveModelMixin(object)
UpdateModelMixin(object)
DestroyModelMixin(object)

drf过滤的实现(类似于django中的ORM)

class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
    '''
    商品列表页
    '''
    # queryset = Goods.objects.all()
    serializer_class = GoodsSerializer
    pagination_class = GoodsPageination

    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=price_min)
        return queryset

 

drf过滤进阶(范围查询,模糊查询)

import django_filters
from .models import Goods


class GoodsFilter(django_filters.rest_framework.FilterSet):
    #查询价格的范围
    pricemin = django_filters.NumberFilter(field_name="shop_price", lookup_expr='gte')
    pricemax = 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 = ['pricemin','pricemax','name']
 

filters.SearchFilter(实现模糊查询最佳方法)

from rest_framework import filters

class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
    '''
    商品列表页
    '''
    queryset = Goods.objects.all()
    serializer_class = GoodsSerializer
    pagination_class = GoodsPageination
    filter_backends = (DjangoFilterBackend,filters.SearchFilter)
    filter_class = GoodsFilter

    #模糊查询
    search_fields = ('name', 'goods_brief', 'goods_desc')

 filters.OrderingFilter(实现升降序)

from rest_framework import filters

class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
    '''
    商品列表页
    '''
    queryset = Goods.objects.all()
    serializer_class = GoodsSerializer
    pagination_class = GoodsPageination
    filter_backends = (DjangoFilterBackend,filters.SearchFilter,filters.OrderingFilter)
    filter_class = GoodsFilter
    search_fields = ('name', 'goods_brief', 'goods_desc')
    ordering_fields = ('sold_num','shop_price')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值