所以我一直试图做的是让我的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
答案 0 :(得分:1)
继承CreateModelMixin
内PostsSerializer
的功能,并尝试定义您的 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)