首页 > 解决方案 > 如何使用 django rest 框架检索用户创建的所有项目

问题描述

我试图只获取属于特定用户的课程,下面我有我用来尝试实现这一目标的模型、序列化程序和视图。如果我从视图中删除整个 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

串行器

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

模型

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

标签: djangodjango-rest-framework

解决方案


您需要按用户过滤对象

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


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

            return Post.objects.filter(owner=user)

推荐阅读