Django rest framework 如何在perform_create viewset(django rest框架)中添加用户?

Django rest framework 如何在perform_create viewset(django rest框架)中添加用户?,django-rest-framework,django-serializer,django-rest-viewsets,django-rest-framework-jwt,Django Rest Framework,Django Serializer,Django Rest Viewsets,Django Rest Framework Jwt,我想做一个“评论”表。在表上,将有一个包含创建注释的用户id的字段。与注释表相关的用户来自Django默认用户模型。这是注释模型: class Comment(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) content = models.TextField() pub_date = models.DateTimeField(auto_now_add=True) 这是注释

我想做一个“评论”表。在表上,将有一个包含创建注释的用户id的字段。与注释表相关的用户来自Django默认用户模型。这是注释模型:

class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)

这是注释序列化程序:

class CommentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Comment
        fields = '__all__'

这是用于创建新注释的视图集:

class CommentViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    permission_classes = (IsAuthenticated,)

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

我还将用户与django rest jwt集成以进行授权。这是我发送给API的头和数据

标题:

授权:承载{jwt令牌}

内容类型:application/json

正文:

{ “内容”:“这是评论” }


但我得到的回应是:

{ “用户”:[ “此字段为必填字段。” ] }



如何修复序列化程序,以便它从令牌(request.user)检索用户?

这是因为
用户
字段不是
只读字段
。所以你必须做到这一点

此DRF文档--对其进行了详细描述

在您的情况下,在序列化程序的元类中指定
只读\u字段将解决以下问题:)

class CommentSerializer(serializers.ModelSerializer):
类元:
模型=注释
字段='\uuuu所有\uuuu'

只读字段=('user',)#此处有更改这是因为
用户
字段不是
只读字段。所以你必须做到这一点

此DRF文档--对其进行了详细描述

在您的情况下,在序列化程序的元类中指定
只读\u字段将解决以下问题:)

class CommentSerializer(serializers.ModelSerializer):
类元:
模型=注释
字段='\uuuu所有\uuuu'
只读字段=('user',)#此处有更改
class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = '__all__'
        read_only_fields = ('user',) # change is here <<<