📌

Django Rest Framework (DRF)で部分一致フィルタを実装する

2023/07/03に公開

Django Rest Framework (DRF)で部分一致フィルタを実装するためには、Djangoフィルターバックエンドを使うのが一般的です。これは、django_filters モジュールを使用します。

このモジュールをまだインストールしていない場合は、以下のコマンドでインストールできます:

pip install django-filter

以下は、部分一致検索を実現するための一般的な手順です:

フィルタセットを定義します。以下はmodels.pyに存在するMyModelというモデルでnameフィールドを部分一致検索するためのフィルタセットです:

import django_filters

class MyModelFilter(django_filters.FilterSet):
    name = django_filters.CharFilter(lookup_expr='icontains') 

    class Meta:
        model = MyModel
        fields = ['name',]

ここで、lookup_expr='icontains'は、大文字小文字を区別せずに部分一致を行うための設定です。

次に、作成したフィルタセットをViewSetに適用します:

from rest_framework import viewsets
from django_filters.rest_framework import DjangoFilterBackend

class MyModelViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_class = MyModelFilter

これで、クライアントからのリクエストにnameパラメータが含まれている場合、その値に部分一致するMyModelのインスタンスがレスポンスとして返されます。

ただし、これらのコードは例示のためのものであり、実際の使用ではモデルやフィールド名を適切に置き換える必要があります。また、セキュリティやパフォーマンスの観点から、適切なフィルタリングとバリデーションを行うことが重要です。

Discussion