python - Django 休息 : Auth user is not passed to the serialiser error - Field is required

标签 python django django-rest-framework

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

模型.py

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)

序列化器.py

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.py

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', )

关于python - Django 休息 : Auth user is not passed to the serialiser error - Field is required,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49097426/

相关文章:

python - patsy 中的单热编码

python - 所有成对的 python

python - 如何在 Python 中转义撇号等?

python - Django model.objects.all() 在正常调用时给出列表索引超出范围

python - djangorest框架多个url参数

python - 切片 3d numpy 数组

python - 属性错误: module 'statsmodels' has no attribute 'datasets'

python - 如何在Django中的表单验证中排除某些字段

python - 使用 Django REST Framework 时,当序列化器嵌套时如何排除父级?

Django - 列 'user_id' 不能为空