如何检索用户使用django rest框架创建的所有项
我正在尝试只获取属于以下特定用户的课程,我有用于尝试实现此目标的模型、序列化程序和视图。如果我从视图中删除整个get_queryset函数,api将返回相应的用户和每个用户创建的每个课程。如果get_queryset仍然存在,则api始终返回user not found,并且仍然提供所有存在的课程。有人能告诉我怎样才能达到我想要的结果吗 视图: 序列化程序如何检索用户使用django rest框架创建的所有项,django,django-rest-framework,Django,Django Rest Framework,我正在尝试只获取属于以下特定用户的课程,我有用于尝试实现此目标的模型、序列化程序和视图。如果我从视图中删除整个get_queryset函数,api将返回相应的用户和每个用户创建的每个课程。如果get_queryset仍然存在,则api始终返回user not found,并且仍然提供所有存在的课程。有人能告诉我怎样才能达到我想要的结果吗 视图: 序列化程序 class UserSerializer(serializers.ModelSerializer): courses = seria
class UserSerializer(serializers.ModelSerializer):
courses = serializers.PrimaryKeyRelatedField(
many=True, queryset=Course.objects.all())
class Meta:
model = User
fields = ['id', 'username', 'courses']
模型
在评论中给出您的答案:
- 您可以使用身份验证中间件提供的
。在这种情况下,它只适用于经过身份验证的用户,并且您无法查看其他用户的课程self.request.user
- 您可以使用您提到的端点
。在这种情况下,您可以通过以下方式获取用户:users//
class UserDetail(泛型.retrieveUpdatedStroyapiView):
权限\u类=[isprofileownerreadoly]
serializer\u class=UserSerializer
def get_queryset(自我):
返回UserDetail.objects.filter(pk=self.kwargs[“pk”])
如果需要其他示例,请参阅此线程:
编辑:在这两种情况下,使用以下命令更改UserSerializer:
class UserSerializer(serializers.ModelSerializer):
courses=serializers.PrimaryKeyRelatedField(
多=真,只读=真)
类元:
模型=用户
字段=['id'、'username'、'courses']
您需要按用户筛选对象
class CreatePostsView(viewsets.ModelViewSet):
model = Post
serializer_class = PostsSerializer
def get_queryset(self):
user = self.request.user
return Post.objects.filter(owner=user)
您是如何定义映射到视图的URL的?如果您想让特定用户创建课程,您的URL必须允许选择用户id。类似于
https://api.yourcourses.com/user//courses
如果要使用身份验证中间件提供的用户
,在本例中,您应该能够直接使用self.request.user.courses
或courses.objects.filter(owner=self.request.user)
@AlexandreS url以路径('users/',views.UserDetail.as_view())的形式给出,这不起作用,它只获取一个用户的详细信息,但当我使用可浏览的api时,我仍然看到每一个课程的put请求。我认为问题来自序列化程序中的courses变量,但我不知道如何仅获取用户课程而不是所有课程。事实上,序列化程序的参数为queryset=Course.objects.all()
。尝试删除此参数并设置只读=True
。
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
class CreatePostsView(viewsets.ModelViewSet):
model = Post
serializer_class = PostsSerializer
def get_queryset(self):
user = self.request.user
return Post.objects.filter(owner=user)
class CoursesByOwnerView(RetrieveModelMixin, GenericViewSet):
serializer_class = YourModelSerializer
authentication_classes =[TokenAuthentication,]
permission_classes = [IsAuthenticated,]
def list(self, request, *args, **kwargs):
course_taker = self.request.user
courses = YourModel.objects.filter(owner=course_taker).values('your_model_fields')
return Response(courses)