Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检索用户使用django rest框架创建的所有项_Django_Django Rest Framework - Fatal编程技术网

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

如何检索用户使用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

我正在尝试只获取属于以下特定用户的课程,我有用于尝试实现此目标的模型、序列化程序和视图。如果我从视图中删除整个get_queryset函数,api将返回相应的用户和每个用户创建的每个课程。如果get_queryset仍然存在,则api始终返回user not found,并且仍然提供所有存在的课程。有人能告诉我怎样才能达到我想要的结果吗

视图:

序列化程序

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)