DRFでURLにパラメータを含んだRouterを作りたいと思った。
調べたところ、次の質問にたどり着いた。
まず、以下のような形で、正規表現を作る。
router.register(
r"project/(?P<project_id>\d+)/task",
ProjectTaskViewSet
)
そして、ViewSet側では、 lookup_url_kwarg
を指定して、それを元にQuerySetを絞り込む。
from rest_framework.mixins import ListModelMixin from rest_framework.viewsets import GenericViewSet class ProjectTaskViewSet(ListModelMixin, GenericViewSet): queryset = Task.objects.all() serializer_class = ProjectTaskSerializer lookup_url_kwarg = "project_id" def get_queryset(self): project_id = self.kwargs.get(self.lookup_url_kwarg) return self.queryset.filter(project=project_id)