0

我想做一个“评论”表。在表上,将有一个包含创建评论的 user_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 token}

内容类型:应用程序/json

身体:

{ "content": "这是评论" }


但我得到了这个回应:

{ "user": [ "此字段为必填项。" ] }


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

4

1 回答 1

2

这是因为该user字段不是read only field. 所以你必须这样做。

这个 DRF 文档——指定只读字段很好地描述了它

在你的情况下,read_only_fields在你的序列化程序的 Meta 类中指定将解决问题:)

class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = '__all__'
        read_only_fields = ('user',) # change is here <<<
于 2019-02-01T17:23:34.173 回答