标签:
django
django-rest-framework
python

Django REST framework如何获取当前用户创建的内容?

提问于:11 天前 ( )最后更新于:11 天前 (2020-11-22 16:40:27)提问人:豆瓣123455


django:3.1.1
drf: 3.12.2

在项目里我用到的ModelViewSet,默认情况,我访问接口,获取到的是所有数据 ,但是我希望当访问这个接口的时候,只能获取当前用户自己创建的对象

以下是我的代码,无法正常运行,请指教

class Post_ViewSet(viewsets.ModelViewSet):

    queryset = Post.objects.all()
    serializer_class = serializers.PostSerializer

    def list(self, request, *args, **kwargs):
        return self.queryset.filter(author=self.request.user)

1个回答

free
free

有两种方案可以实现你的目的.

1.覆盖 get_queryset()

class Post_ViewSet(viewsets.ModelViewSet):

    queryset = Post.objects.all()
    serializer_class = serializers.PostSerializer

    def get_queryset(self):
        return self.queryset.filter(author=self.request.user) # 记得替换这里的author为你模型里对应的字段

2.创建一个自定义的过滤器

drf官方网站这里的代码,你可以直接拿来改改用 https://www.django-rest-framework.org/api-guide/filtering/#example

帮你粘贴过来:

class IsOwnerFilterBackend(filters.BaseFilterBackend):
    """
    仅允许用户查看自己创建的对象。
    """
    def filter_queryset(self, request, queryset, view):
        return queryset.filter(author=request.user) # 记得替换这里的author为你模型里对应的字段

用法也很简单,这样就行了

class Post_ViewSet(viewsets.ModelViewSet):

    queryset = Post.objects.all()
    serializer_class = serializers.PostSerializer
    filter_backends = [IsOwnerFilterBackend]
2020-11-22 17:06:38