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