10月3週

土曜:

djangoフィルターの作成

  • setting.pyの設定
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'django_filters',  # 追加
    'rest_framework.authtoken',
    'corsheaders',
    'lottery_api.apps.LotteryApiConfig',
    'lottery_batch.apps.LotteryBatchConfig',
]

# 追加
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}
  • filters.pyを新規作成(timesをフィルタリングしたい場合)
from django_filters import rest_framework as filters

from lottery_api.models import (
    LotoSeven,
)


class LotoSevenFilter(filters.FilterSet):
    times = filters.RangeFilter(field_name='times')

    class Meta:
        model = LotoSeven
        fields = ['times']
  • viewに組み込む
# 汎用APIView ListAPIView (リストを取得するだけの用途)他にもCreateAPIViewとかがある
class LotoSevenListView(generics.ListAPIView):
    queryset = LotoSeven.objects.all()
    serializer_class = serializers.LotoSevenSerializer
    filter_class = LotoSevenFilter  # 追加

    def get_queryset(self):
        return self.queryset.order_by('times')