使用 FilterSet for Anonymous 筛选 QuerySet。如何安装异常 401 UNAuthorized

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

提问人:AlenaSap 提问时间:9/28/2023 更新时间:9/28/2023 访问量:24

问:

我是 django 的初学者开发人员。我做网站foodgram。在这里,您可以发布食谱、订阅作者、将食谱添加到您的购物清单中。我尝试为使用 bu shopping_cart 和 favorite 作为过滤器集的用户安装过滤请求。但是我不能为匿名安装例外。对于请求 /api/recipes/?is_in_shopping_cart 显示所有配方。但必须是错误 401 未自动化

我的代码

滤波器

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"]

如果 I 我删除了过滤器中的方法条件并只保留

Response(status=status.HTTP_401_Unauthorized)通过匿名请求,食谱仍然会出现,并且网站上会出现错误。我很乐意提供任何建议

python django 过滤 匿名

评论

0赞 Community 9/29/2023
请修剪您的代码,以便更轻松地找到您的问题。请遵循这些准则,以创建最小的可重现示例

答: 暂无答案