Kri*_*adi 0 django-serializer django-rest-framework django-rest-viewsets django-rest-framework-jwt
我想做一个“评论”表。在表中,将有一个包含创建评论的 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)
Run Code Online (Sandbox Code Playgroud)
这是评论序列化器:
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
这是创建新评论的视图集:
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)
Run Code Online (Sandbox Code Playgroud)
我还将用户与 django rest jwt 集成以进行授权。这是我发送到 API 的标头和数据。
标题:
授权:持有者{jwt token}
内容类型:application/json
身体:
{ "content": "这是评论" }
但我得到这样的回应:
{ "user": [ "此字段为必填项。" ] }
如何修复序列化器,以便它从令牌(request.user)中检索用户?
这是因为该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 <<<Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2744 次 |
| 最近记录: |