Django rest framework 如何在perform_create viewset(django rest框架)中添加用户?
我想做一个“评论”表。在表上,将有一个包含创建注释的用户id的字段。与注释表相关的用户来自Django默认用户模型。这是注释模型: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) 这是注释
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 <<<