我不确定我做错了什么,但经过身份验证的用户未在序列化器中注册。
模型.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/