RestFrameworkのフィルタコンポーネントとページングコンポーネント
8194 ワード
クラスタインタフェース各種フィルタコンポーネントデータ準備
models.py
admin.py
serializers.py
views.py
urls.py
drf検索フィルタコンポーネント
views.py
drfソートフィルタコンポーネント
views.py
drfベースページングコンポーネント
pagenations.py
views.py
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
admin.py
admin.site.register(models.Car)
serializers.py
class CarModelSerializer(serializers.ModelSerializer):
class Meta:
model = models.Car
fields = ['name', 'price', 'brand']
views.py
# Car
from rest_framework.generics import ListAPIView
class CarListAPIView(ListAPIView):
queryset = models.Car.objects.all()
serializer_class = serializers.CarModelSerializer
urls.py
url(r'^cars/$', views.CarListAPIView.as_view()),
drf検索フィルタコンポーネント
views.py
from rest_framework.generics import ListAPIView
# :drf SearchFilter -
from rest_framework.filters import SearchFilter
class CarListAPIView(ListAPIView):
queryset = models.Car.objects.all()
serializer_class = serializers.CarModelSerializer
# : ( DEFAULT_FILTER_BACKENDS)
filter_backends = [SearchFilter]
# :SearchFilter => :/cars/?search=...
search_fields = ['name', 'price']
# eg:/cars/?search=1,name price 1
drfソートフィルタコンポーネント
views.py
from rest_framework.generics import ListAPIView
# :drf OrderingFilter -
from rest_framework.filters import OrderingFilter
class CarListAPIView(ListAPIView):
queryset = models.Car.objects.all()
serializer_class = serializers.CarModelSerializer
# : ( DEFAULT_FILTER_BACKENDS)
filter_backends = [OrderingFilter]
# :OrderingFilter => :/cars/?ordering=...
ordering_fields = ['pk', 'price']
# eg:/cars/?ordering=-price,pk, price , price , pk
drfベースページングコンポーネント
pagenations.py
from rest_framework.pagination import PageNumberPagination
class MyPageNumberPagination(PageNumberPagination):
# ?page=
page_query_param = 'page'
# ?page=
page_size = 3
# ?page= &page_size=
page_size_query_param = 'page_size'
# : 5 5
max_page_size = 5
views.py
from rest_framework.generics import ListAPIView
class CarListAPIView(ListAPIView):
# queryset , .all(),
queryset = models.Car.objects.all()
serializer_class = serializers.CarModelSerializer
# - - , drf
pagination_class = pagenations.MyPageNumberPagination