【问题标题】:DRF request is not defined for getting current user id没有为获取当前用户 ID 定义 DRF 请求
【发布时间】:2019-02-04 15:53:17
【问题描述】:

所以我一直在尝试做的是让我的 API 视图仅将具有 post_user 属性的对象返回到登录用户的当前 ID。这些post_user 属性被填充,因为每当我发布它时,它都会通过我的序列化程序使用当前用户的ID 填充变量。

但是,我没有成功,因为它说请求未定义。我只想获取当前用户的 id,以便我可以使用它来过滤我的对象返回

views.py

# To retrieve and list all posts with DRF
class ListPosts(generics.ListCreateAPIView):
    queryset = Posts.objects.get(post_user=request.user.id)
    serializer_class = PostsSerializer
    permission_classes = (permissions.IsAuthenticated,)

序列化器.py

# serializer for posts to be taken
class PostsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Posts
        fields = ('id','post_title','post_content',)

    def create(self, validated_data):
        posts = Posts.objects.create(
            post_title=validated_data['post_title'],
            post_content=validated_data['post_content'],
            # gets the id of the current user
            post_user=self.context['request'].user.id, 
        )

        posts.save()
        return posts

【问题讨论】:

    标签: python-3.x django-rest-framework


    【解决方案1】:

    错误在一行

    queryset = Posts.objects.get(post_user=request.user.id)
    

    这里的请求没有在类声明时定义。解决方案是您可以覆盖 get_queryset 方法。

    class ListPosts(generics.ListCreateAPIView):
       queryset = Posts.objects.all()
       serializer_class = PostsSerializer
       permission_classes = (permissions.IsAuthenticated,)
    
       def get_queryset(self, *args, **kwargs):
          return Posts.objects.filter(post_user=self.request.user)
    

    【讨论】:

    • 这个工作的人!我必须返回 Posts.objects.filter(post_user=self.request.user.id) 以供我使用
    【解决方案2】:

    PostsSerializer 中继承CreateModelMixin 的功能,并尝试像def create(request, *args, **kwargs) 一样定义您的create() 方法。

    最后,您可以尝试使用request.user.id 获取用户ID。

    如需更好的文档,您可以查看https://www.django-rest-framework.org/api-guide/generic-views/

    还要检查什么是 Mixins 以及我们为什么使用它(如果你不知道的话)。

    对于一个简短的定义,Mixins 只是一个类,其方法大部分可以被我们的视图继承和使用

    如果您有任何疑问,请发表评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2022-12-14
      相关资源
      最近更新 更多