如何使用 django Rest 框架检索用户创建的所有项目

uhe*_*xos 4 django django-rest-framework

我试图只获取属于特定用户的课程,下面我有模型、序列化器和视图,我正在使用它来尝试实现这一目标。如果我从视图中删除整个 get_queryset 函数,API 将返回相应的用户以及每个用户创建的每个课程。如果 get_queryset 保留,则 api 始终返回未找到的用户,并且仍然提供所有存在的课程。谁能指出我如何才能达到我想要的结果。

看法:

class UserDetail(generics.RetrieveUpdateDestroyAPIView):
    permission_classes = [IsProfileOwnerOrReadOnly]
    # queryset = User.objects.all()
    serializer_class = UserSerializer

    def get_queryset(self):
        user = self.request.user
        queryset = User.objects.all()
        if user is not None:
            queryset = queryset.filter(courses__owner_id=user.id)
        return queryset
Run Code Online (Sandbox Code Playgroud)

串行器

class UserSerializer(serializers.ModelSerializer):
    courses = serializers.PrimaryKeyRelatedField(
        many=True, queryset=Course.objects.all())
    class Meta:
        model = User
        fields = ['id', 'username', 'courses']
Run Code Online (Sandbox Code Playgroud)

模型

class Course (models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    pub_date = models.DateField(default=date.today)
    owner = models.ForeignKey('auth.User', related_name='courses', on_delete=models.CASCADE)
    def __str__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

小智 7

您需要按用户过滤对象

    class CreatePostsView(viewsets.ModelViewSet):
        model = Post
        serializer_class = PostsSerializer


        def get_queryset(self):
            user = self.request.user

            return Post.objects.filter(owner=user)
Run Code Online (Sandbox Code Playgroud)