日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django drf Filter

發(fā)布時間:2024/10/12 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django drf Filter 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.定義get_queryset()方法

from django.shortcuts import renderfrom 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 DjangoFilterBackendclass GoodsList(mixins.ListModelMixin, viewsets.GenericViewSet):class GoodsPagination(PageNumberPagination):page_size = 2page_size_query_param = 'pageSize'page_query_param = 'p'max_page_size = 100# queryset = Goods.objects.all() # 不能切片后再過濾,例如:Goods.objects.all()[:10]serializer_class = GoodsSerializerpagination_class = GoodsPagination# 過濾方法1# 使用此方法,不使用queryset時,須在urls.router中指定base_name參數(shù)def get_queryset(self):queryset = Goods.objects.all() #此時并沒有取出數(shù)據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 renderfrom 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 DjangoFilterBackendclass GoodsList(mixins.ListModelMixin, viewsets.GenericViewSet):class GoodsPagination(PageNumberPagination):page_size = 2page_size_query_param = 'pageSize'page_query_param = 'p'max_page_size = 100queryset = Goods.objects.all() # 不能切片后再過濾,例如:Goods.objects.all()[:10]serializer_class = GoodsSerializerpagination_class = GoodsPaginationfilter_backends = (DjangoFilterBackend,)filter_fields = ('name',) #逗號必加,缺點無法模糊查詢

test

3.自定義filter

from django.shortcuts import renderfrom 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 DjangoFilterBackendimport 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 = Goodsfields = ['min_price','max_price']class GoodsList(mixins.ListModelMixin, viewsets.GenericViewSet):class GoodsPagination(PageNumberPagination):page_size = 2page_size_query_param = 'pageSize'page_query_param = 'p'max_page_size = 100queryset = Goods.objects.all() # 不能切片后再過濾,例如:Goods.objects.all()[:10]serializer_class = GoodsSerializerpagination_class = GoodsPaginationfilter_backends = (DjangoFilterBackend,)# filter_fields = ('name',) #逗號必加,缺點無法模糊查詢filterset_class = GoodsFilter

test

?

轉載于:https://www.cnblogs.com/chenyishi/p/10656604.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的django drf Filter的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。