如何在Django Rest Framework中将当前用户设置为用户字段? [英] How to set current user to user field in Django Rest Framework?

查看:541
本文介绍了如何在Django Rest Framework中将当前用户设置为用户字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码正常工作。我可以通过选择图像和用户从DRF面板创建一个 Post 对象。但是,我希望DRF通过当前登录的用户填充用户字段。



models.py

  class Post(TimeStamped):
user = models.ForeignKey(User)
photo = models.ImageField(upload_to ='upload /')
hidden = models.BooleanField(default = False)
upvotes = models.PositiveIntegerField(default = 0)
downvotes = models.PositiveIntegerField(default = 0)
comments = models。 PositiveIntegerField(default = 0)

serializers.py

  class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ['id ','user','photo']

views.py / p>

  class PhotoListAPIView(generics.ListCreateAPIView):
queryset = Post.objects.filter(hidden = False)
serializer_class = PostSerializer
authentication_classes =(SessionAuthentication,BasicAuthentication)
permission_classes =(IsAuthenticated)

我该怎么做这个?

解决方案

在我的头顶,你可以覆盖 perform_create() code>方法:

  class PhotoListAPIView(generics.ListCreateAPIView):
...
def perform_create(self,serializer):
serializer.save(user = self.request.user)

给一个镜头,让我知道如果它的作品


I have the following code working perfectly. I can create a Post object from DRF panel by selecting an image and a user. However I want DRF to populate the user field by the currently logged in user.

models.py

class Post(TimeStamped):
    user = models.ForeignKey(User)
    photo = models.ImageField(upload_to='upload/')
    hidden = models.BooleanField(default=False)
    upvotes = models.PositiveIntegerField(default=0)
    downvotes = models.PositiveIntegerField(default=0)
    comments = models.PositiveIntegerField(default=0)

serializers.py

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ['id', 'user', 'photo']

views.py

class PhotoListAPIView(generics.ListCreateAPIView):
    queryset = Post.objects.filter(hidden=False)
    serializer_class = PostSerializer
    authentication_classes = (SessionAuthentication, BasicAuthentication)
    permission_classes = (IsAuthenticated,)

How can I do this?

解决方案

Off the top of my head, you can just override the perform_create() method:

class PhotoListAPIView(generics.ListCreateAPIView):
    ...
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

Give that a shot and let me know if it works

这篇关于如何在Django Rest Framework中将当前用户设置为用户字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆