Django REST:Auth用户未传递给序列化程序错误 - 需要字段

问题描述 投票:1回答:1

我不确定我做错了什么,但经过身份验证的用户未在序列化程序中注册。

models.朋友

class Post(models.Model):
    posted_by = models.ForeignKey('auth.User', on_delete=models.CASCADE)


    def save(self, *args, **kwargs):
        super(Post, self).save(*args, **kwargs)

serialize认识.朋友

class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = '__all__'

    def create(self, validated_data):
        post = Post.objects.create(**validated_data)
        # extra code to add images

views.朋友

class PostViewSet(viewsets.ModelViewSet):

    serializer_class = PostSerializer

    permission_classes = (
        permissions.IsAuthenticatedOrReadOnly,
        IsOwnerOrReadOnly, )

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

我不明白为什么serializer.save(posted_by=self.request.user)没有按预期工作。它应该传递有关该字段的所需信息。

当我发出POST请求时,我收到错误

{
    "posted_by": [
        "This field is required."
    ]
}

我认为这与序列化器中的create方法有关。出于某种原因,posted_by不存在于validated_data(或类似的东西)。我想知道幕后究竟发生了什么。

python django django-rest-framework
1个回答
2
投票

只需将posted_by指定为只读字段。

class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = '__all__'
        read_only_fields = ('posted_by', )
© www.soinside.com 2019 - 2024. All rights reserved.