filter queryset with filterset for anonymous. How install exception 401 UNAuthorized

37 Views Asked by At

I am a beginner developer django. I do site foodgram. Here you can publish recipes, subscribe to authors, add recipes to your shopping list. I try install filtering requests for users using bu shopping_cart and favorite as filterset. But I cant to install exception for anonymous.For request /api/recipes/?is_in_shopping_cart appear all recipes. But must be error 401 Unautorized

My code

filter

class CustomFilters(filters.FilterSet):
    tags = filters.ModelMultipleChoiceFilter(field_name='tags__slug',
                                             to_field_name='slug',
                                             queryset=Tag.objects.all())
    author = filters.NumberFilter(field_name='author')
    is_favorited = filters.BooleanFilter(field_name='is_favorited',
                                         method='get_is_favorited')
    is_in_shopping_cart = filters.BooleanFilter(
        field_name='is_in_shopping_cart',
        method='get_is_in_shopping_cart'
    )

    def get_is_favorited(self, queryset, name, value):
        user = self.request.user
        if (user.is_authenticated and value is True
           and name == 'is_favorited'):
            return queryset.filter(recipes_favorite_recipes__user=user)
        return Response(status=status.HTTP_401_UNAUTHORIZED)

    def get_is_in_shopping_cart(self, queryset, name, value):
        user = self.request.user
        if (
            user.is_authenticated and value is True
            and name == 'is_in_shopping_cart'
        ):
            return queryset.filter(recipes_shopping_cart_recipes__user=user)
        return Response(status=status.HTTP_401_UNAUTHORIZED)

    class Meta:
        model = Recipes
        fields = ['tags', 'author', "is_in_shopping_cart", "is_favorited"]

if I I remove the method condition in the filter and leave only

Response(status=status.HTTP_401_Unauthorized) with an anonymous request, recipes still appear and an error appears on the site. I will glad any advice

0

There are 0 best solutions below