ModelViewSetとGenericViewSetの違いと使い方


DRFでは、ModelViewSetとGenericViewSetという2つの主要なViewSetのクラスが提供されています。それぞれの違いと使い方について説明します。

  1. ModelViewSet: ModelViewSetは、モデルと関連するCRUD(作成、読み取り、更新、削除)操作を処理するためのViewSetです。通常、モデルと関連するデータベーステーブルに対して操作を実行する際に使用されます。

以下は、ModelViewSetの主な特徴です:

  • モデルに基づいたデータの作成、読み取り、更新、削除を提供します。
  • 自動的に生成されるURLパターンを提供し、デフォルトのルーティングを使用します。
  • デフォルトのシリアライザやパフォーマンスの最適化など、多くの便利な機能を提供します。

例えば、以下のようにModelViewSetを使用してモデルを操作できます:

from rest_framework.viewsets import ModelViewSet
from .models import MyModel
from .serializers import MyModelSerializer
class MyModelViewSet(ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
  1. GenericViewSet: GenericViewSetは、モデルに依存しない一般的な操作を処理するためのViewSetです。モデルと直接関連しない特定のデータセットに対する操作を実行する場合に使用されます。

以下は、GenericViewSetの主な特徴です:

  • デフォルトでは、CRUD操作を提供しません。必要に応じて、サブクラス化してメソッドをオーバーライドする必要があります。
  • モデルに依存しないため、複数のモデルに対して再利用可能なビューロジックを提供します。
  • デフォルトのルーティングを提供しませんが、ルーティングの設定方法はViewSetMixinクラスを参照してください。

例えば、以下のようにGenericViewSetを使用して一般的な操作を実装できます:

from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin
from .models import MyModel
from .serializers import MyModelSerializer
class MyCustomViewSet(GenericViewSet, ListModelMixin, CreateModelMixin, RetrieveModelMixin):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

以上がModelViewSetとGenericViewSetの違いと使い方の概要です。必要に応じて、それぞれのクラスをカスタマイズして必要な操作や機能を実装することができます。