Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django REST:Auth user未传递给serialiser错误-需要字段_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django REST:Auth user未传递给serialiser错误-需要字段

Python Django REST:Auth user未传递给serialiser错误-需要字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,我不确定我做错了什么,但是经过身份验证的用户没有在serialiser中注册 型号.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) class PostSerializ

我不确定我做错了什么,但是经过身份验证的用户没有在serialiser中注册

型号.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)
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
class PostViewSet(viewsets.ModelViewSet):

    serializer_class = PostSerializer

    permission_classes = (
        permissions.IsAuthenticatedOrReadOnly,
        IsOwnerOrReadOnly, )

    def perform_create(self, serializer):
        serializer.save(posted_by=self.request.user)
序列化程序.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)
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
class PostViewSet(viewsets.ModelViewSet):

    serializer_class = PostSerializer

    permission_classes = (
        permissions.IsAuthenticatedOrReadOnly,
        IsOwnerOrReadOnly, )

    def perform_create(self, serializer):
        serializer.save(posted_by=self.request.user)
视图.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)
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
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\u by=self.request.user)
不能按预期工作。它应该传递有关字段的所需信息

当我做POST请求时,我得到的错误是

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

我认为这与serialiser中的
create
方法有关。由于某些原因,
发布的
未出现在
验证的\u数据中(或类似内容)。我想知道幕后到底发生了什么。

只需将
posted\u by
指定为只读字段即可

class PostSerializer(serializers.ModelSerializer):

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