This is normal usage of viewset.
And if you want to filter some data using path parameter in DRF, Just do it like below.
class DateListViewSet(viewsets.ModelViewSet): queryset = TimeTable.objects.all() serializer_class = TimeTableSerializer lookup_field = 'movie_id' def retrieve(self, request, *args, **kwargs): movie_id = kwargs.get('movie_id', None) movie = Movie.objects.get(id=movie_id) self.queryset = TimeTable.objects.filter(show__movie=movie).distinct() return super(DateListViewSet, self).retrieve(request, *args, **kwargs)
Or if you use mixins,
class ModelViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, GenericViewSet): """ A viewset that provides default `create()`, `retrieve()`, `update()`, `partial_update()`, `destroy()` and `list()` actions. """ pass
Its implementation includes the following methods (HTTP verb and endpoint on bracket)
list()
(GET/date-list/
)create()
(POST/date-list/
)retrieve()
(GETdate-list/<id>/
)update()
(PUT/date-list/<id>/
)partial_update()
(PATCH,/date-list/<id>/
destroy()
(DELETE/date-list/<id>/
)
Rest is same as documentation.
source: https://stackoverflow.com/questions/42582859/filtering-using-viewsets-in-django-rest-framework/42632306#42632306