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)