drf search filter assembly;

Preparation: group search interface to various filtering components required data.

#1.models.py

class Car(models.Model):
    name = models.CharField(max_length=16, unique=True, verbose_name='车名')
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='价格')
    brand = models.CharField(max_length=16, verbose_name='品牌')

    class Meta:
        db_table = 'api_car'
        verbose_name = '汽车表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

# 2. admin.py

from . import models
admin.site.register(models.Car)

#3.serializers.py

class CarModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Car
        fields = ['name', 'price', 'brand']

#4.views.py

# Car的群查接口
from rest_framework.generics import ListAPIView

class CarListAPIView(ListAPIView):
    queryset = models.Car.objects.all()
    serializer_class = serializers.CarModelSerializer

#5.urls.py

url(r'^cars/$', views.CarListAPIView.as_view()),

A drf search filter assembly

#1.views.py

from rest_framework.generics Import ListAPIView 

# Step: drf of SearchFilter - search filters 
from rest_framework.filters Import searchfilter 

class CarListAPIView (ListAPIView): 
    QuerySet = models.Car.objects.all () 
    serializer_class = serializers.CarModelSerializer 

    # Step two: filter classes are local configuration (using global configuration DEFAULT_FILTER_BACKENDS) 
    filter_backends = [searchfilter] 

    # step: searchFilter class dependent filter filters => Interface:? / cars / Search = ... 
    search_fields = [ ' name ' , ' . price ' ]
    # EG:? / Cars / Search = 1, name and price data will be included in the query 1 is out

Two sorting filter assembly drf

#1.views.py

from rest_framework.generics Import ListAPIView 

# Step: The DRF OrderingFilter - sorting filter 
from rest_framework.filters Import OrderingFilter 

class CarListAPIView (ListAPIView): 
    QuerySet = models.Car.objects.all () 
    serializer_class = serializers.CarModelSerializer 

    # Step: filter classes are local configuration (using global configuration DEFAULT_FILTER_BACKENDS) 
    filter_backends = [OrderingFilter] 

    # step: OrderingFilter class dependent filter filters => Interface:? / cars / Ordering = ... 
    ordering_fields = [ ' PK ' , ' . price ']
     # EG: / cars / Ordering = -Price, pk, first by descending price, if the same price, then pk appear in ascending order?

Three drf basis paging component

# 1 application folder creation under: pahenations.py; write code

from rest_framework.pagination Import PageNumberPagination 

class MyPageNumberPagination (PageNumberPagination):
     # ? Page = Page 
    page_query_param = ' Page ' 
    # Page = default page number of a displayed? 
    PAGE_SIZE = 3 # Page = page & page_size = the Number of User-defined? Article display a number 
    page_size_query_param = ' PAGE_SIZE ' # user defined maximum limit for a number of display: display only values exceeding 5 5 
    max_page_size = 5
    
    

# 2.cbv

from rest_framework.generics import ListAPIView
# 导入自定义的分页器
from . import pagenations
class CarListAPIView(ListAPIView):
    # 如果queryset没有过滤条件,就必须 .all(),不然分页会出问题
    queryset = models.Car.objects.all()
    serializer_class = serializers.CarModelSerializer
    
    # 分页组件 - 给视图类配置分页类即可 - 分页类需要自定义,继承drf提供的分页类即可
    pagination_class = pagenations.MyPageNumberPagination

 

 

Guess you like

Origin www.cnblogs.com/tfzz/p/11729928.html