DRF / django-filter を使ってフィルタリング
はじめに
Django REST Framework で API 作成でウェブ API を作成した。この記事では、django-filter を使って、リクエストに合わせてフィルタリングを行ったレスポンスを返せるようにする。Filtering - Django REST frameworkを参考にした。動作環境は以下。
- OS: Windows 10 Pro (WSL2 Ubuntu-20.04)
- Python: 3.8.5
- Django: 3.2
- djangorestframework: 3.12.4
- django-filter: 2.4.0
インストールおよびセットアップ
以下コマンドでインストールする。
$ pip install django-filter
さらにプロジェクトの settings.py にて 'django_filters' と 'DEFAULT_FILTER_BACKENDS' を追記する。
# Application definition
INSTALLED_APPS = [
...
'rest_framework',
'django_filters',
]
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}
これで DRF を読み込んで、使用することができる。
フィルタリング
ViewSets.py にて、フィルタリングしたいフィールドを filterset_fields として指定する。ここでは、Django REST Framework で API 作成で扱った Info というモデルの、id という項目を指定する。
from .models import Info
from .serializers import InfoSerializer
from rest_framework import viewsets
class InfoViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Info.objects.all()
serializer_class = InfoSerializer
filterset_fields = ['id']
動作確認
ここまででフィルタリング設定が完了しているはずなので、開発用サーバーにて動作確認をするため python manage.py runserver
で開発用サーバーを立ち上げる。http://localhost:8000/api/info/?id=1111111 のように id を指定してアクセスすると、フィルタリング結果が返される。また http://localhost:8000/api/info へアクセスすると、API コンソール右上に「フィルタ」という項目が追加されており、手動でフィルタリング結果を見ることもできる。
おわりに
django-filter を用いてフィルタリングを実行できた。次は React で開発したフロントエンドから API を叩いて、適切なデータを得ることを試してみる。
Author And Source
この問題について(DRF / django-filter を使ってフィルタリング), 我々は、より多くの情報をここで見つけました https://qiita.com/honda28/items/ad5bff341c22f000c227著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .