将序列化对象添加到当前用户

Add serialized object to current user

所以我有一个接受序列化相册对象并将所有者分配给当前用户的视图

class AlbumListViewer(APIView):    
    def post(self, request, format = None):
        request.data['user_id'] = request.user.id
        serializer = AlbumSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(status.HTTP_201_CREATED)
        return Response(status = status.HTTP_400_BAD_REQUEST)

我得到的错误是

null value in column "user_id" violates not-null constraint

我的序列化程序看起来像这样

class AlbumSerializer(serializers.ModelSerializer):

    user = serializers.PrimaryKeyRelatedField(read_only=True)
    class Meta:
        model = Album
        fields = ('id','album_name', 'date_created','user')

最后我的模型看起来像这样

class Album(models.Model):
    user = models.ForeignKey(User)
    album_name = models.CharField(max_length=30)
    date_created = models.DateTimeField(editable=False, auto_now_add=True)

我已经尝试在 JSON 数据中分配一个用户 ID,但序列化程序无法识别它,无论如何分配这个序列化对象并在保存之前给它一个所有者?

您的 AlbumListViewer 有一些问题。不要尝试向 validatated_data 添加任何内容。而是将 partial=True 传递给序列化程序,并在验证后使用 save() 方法保存缺失值。

class AlbumListViewer(APIView):   
    def post(self, request, format = None):
        serializer = AlbumSerializer(data=request.data, partial=True)
        if serializer.is_valid():
            user = request.user
            serializer.save(user=user)
            return Response(status=status.HTTP_201_CREATED)
        return Response(status = status.HTTP_400_BAD_REQUEST)