首页 > 解决方案 > 基于 DRF 类的视图 api 数据过滤问题

问题描述

我正在尝试将更新和销毁视图添加到此视图。但问题是我知道如何使用基于函数的视图来做到这一点,并且我在这里使用的是基于类的。

views.py

class UpdatePostView(generics.RetrieveUpdateDestroyAPIView):
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = PostSerializer
    queryset = Post.objects.all()
    lookup_field = 'id'

serializers.py

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

问题 1:任何用户都可以删除或更新其他用户的任何帖子

问题2:在更新方法中有一个更新用户的选项

{
    "id": 2,
    "title": "Post 1",
    "image": null,
    "user": 3
}

我试图将这些视图保留为基于类的视图,以减少代码行

标签: pythondjango-rest-framework

解决方案


我们可以覆盖get_queryset而不是queryset = Post.objects.all()

在 UpdatePostView 类中

def get_queryset(self):
    return Post.objects.filter(user=self.request.user)

或继续使用queryset=

queryset = Post.objects.all()

def get_queryset(self):
    return super().get_queryset().filter(user=self.request.user)

所以,只能访问他们的帖子。


推荐阅读