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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django REST:Auth用户未传递给序列化程序错误 - 需要字段相关的知识,希望对你有一定的参考价值。

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

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(或类似的东西)。我想知道幕后究竟发生了什么。

答案

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

class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = '__all__'
        read_only_fields = ('posted_by', )

以上是关于Django REST:Auth用户未传递给序列化程序错误 - 需要字段的主要内容,如果未能解决你的问题,请参考以下文章

django-rest-auth 自定义注册无法保存额外字段

带有 django-rest-auth 和 django-rest-knox 的 AttributeError - 令牌序列化器

Django 无法使用 rest-auth/user/ 获取当前用户

从 Django Rest Framework 将经过身份验证的用户传递给 SendBird

使用 Django-rest-auth 创建新用户时创建自定义用户模型

当他从所有浏览器(Django-rest-auth,JWT)更改密码时如何注销用户?