diff --git a/movie_manager/serializers.py b/movie_manager/serializers.py index 07cc417..cb39648 100644 --- a/movie_manager/serializers.py +++ b/movie_manager/serializers.py @@ -28,9 +28,18 @@ class MovieSerializer(serializers.ModelSerializer): def get_has_been_scheduled(self, obj): return Showing.objects.filter(movie_id=obj.id).exists() +class MovieListListSerializer(serializers.ModelSerializer): + movie_count = serializers.SerializerMethodField() + + class Meta: + model = MovieList + fields = ["id", "name", "owner", "public", "movie_count"] + + def get_movie_count(self, obj): + return obj.movies.count() + class MovieListSerializer(serializers.ModelSerializer): - movie_count = serializers.SerializerMethodField() movies = MovieSerializer(read_only=True, many=True) serializer_class = MovieSerializer @@ -42,10 +51,8 @@ class MovieListSerializer(serializers.ModelSerializer): class Meta: model = MovieList - fields = ["id", "name", "owner", "public", "movies", "movie_count"] + fields = ["id", "name", "owner", "public", "movies"] - def get_movie_count(self, obj): - return obj.movies.count() class UserSerializer(serializers.Serializer): diff --git a/movie_manager/views.py b/movie_manager/views.py index 0a3dbe9..973a488 100644 --- a/movie_manager/views.py +++ b/movie_manager/views.py @@ -16,7 +16,7 @@ from movie_manager.serializers import ( MovieListSerializer, MovieSerializer, ScheduleSerializer, - ShowingSerializer, + ShowingSerializer, MovieListListSerializer, ) @@ -55,11 +55,25 @@ class MovieViewset(viewsets.ModelViewSet): class MovieListViewset(viewsets.ModelViewSet): - queryset = MovieList.objects.prefetch_related("movies").order_by("name") + queryset = MovieList.objects.all() authentication_classes = [TokenAuthentication] permission_classes = [permissions.IsAuthenticated | ReadOnly] - serializer_class = MovieListSerializer + def get_serializer_class(self): + if self.action == "list": + return MovieListListSerializer + else: + return MovieListSerializer + + def get_queryset(self): + if self.action == "list": + return MovieList.objects.filter(owner=self.request.user) + else: + return MovieList.objects.prefetch_related( + "movies", + "movies__showing_set" + ).order_by("name") + def create(self, request, *args, **kwargs): movie_list = MovieList.objects.create(