diff --git a/apps/recipe/serializers/common.py b/apps/recipe/serializers/common.py index acbfaad3..fec5978d 100644 --- a/apps/recipe/serializers/common.py +++ b/apps/recipe/serializers/common.py @@ -8,13 +8,14 @@ class RecipeListSerializer(serializers.ModelSerializer): title_translated = serializers.CharField(allow_null=True, read_only=True) subtitle_translated = serializers.CharField(allow_null=True, read_only=True) + in_favorites = serializers.BooleanField() class Meta: """Meta class.""" model = models.Recipe fields = ('id', 'title_translated', 'subtitle_translated', 'author', - 'published_at') + 'published_at', 'in_favorites') read_only_fields = fields diff --git a/apps/recipe/views/common.py b/apps/recipe/views/common.py index c52f8a9f..f268107e 100644 --- a/apps/recipe/views/common.py +++ b/apps/recipe/views/common.py @@ -4,18 +4,25 @@ from recipe import models from recipe.serializers import common as serializers -class RecipeListView(generics.ListAPIView): - """Resource for obtaining a list of recipes.""" +class RecipeViewMixin(generics.GenericAPIView): + """Recipe view mixin.""" pagination_class = None permission_classes = (permissions.AllowAny,) - queryset = models.Recipe.objects.published() + + def get_queryset(self): + user = self.request.user + qs = models.Recipe.objects.published().annotate_in_favorites(user) + return qs + + +class RecipeListView(RecipeViewMixin, generics.ListAPIView): + """Resource for obtaining a list of recipes.""" + serializer_class = serializers.RecipeListSerializer -class RecipeDetailView(generics.RetrieveAPIView): +class RecipeDetailView(RecipeViewMixin, generics.RetrieveAPIView): """Resource for detailed recipe information.""" - permission_classes = (permissions.AllowAny,) - queryset = models.Recipe.objects.published() serializer_class = serializers.RecipeDetailSerializer