我想做一个“评论”表。在表上,将包含一个包含user_id的字段,该字段创建了注释。与注释表相关的用户来自Django默认用户模型。这是Comment模型:
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
正文:
{ “ content”:“这是评论” }
但是我得到这个回应:
{ “用户”:[ “这是必填栏。” ] }
如何修复序列化程序,以便它将从令牌(request.user)中检索用户?
答案 0 :(得分:1)
这是因为在 user
字段是不是一个的 read only field
即可。所以,你必须让它如此。
此DRF文档-Specifying read only fields对其进行了很好的描述
在你的情况下,指定的 read_only_fields
强>在串行器的元类将解决的问题:)
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = '__all__'
read_only_fields = ('user',) # change is here <<<