未定义DRF请求以获取当前用户ID

时间:2019-02-04 03:40:48

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

所以我一直试图做的是让我的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,)

serializers.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

2 个答案:

答案 0 :(得分:1)

继承CreateModelMixinPostsSerializer的功能,并尝试定义您的 create()方法,例如def create(request, *args, **kwargs)

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

要获得更好的文档,可以检查https://www.django-rest-framework.org/api-guide/generic-views/

还要检查什么是Mixins以及为什么要使用它(如果您不知道)。

对于一个简短的定义, Mixin只是具有大多数方法可以被我们的视图继承和使用的方法的类

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

答案 1 :(得分:0)

错误已解决

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)