【问题标题】:Add serialized object to current user将序列化对象添加到当前用户
【发布时间】:2015-04-03 20:25:20
【问题描述】:

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

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)

我得到的错误是

“user_id”列中的空值违反非空约束

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

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,但序列化程序无法识别它,无论如何要分配此序列化对象并在保存之前为其分配所有者?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    您的 AlbumListViewer 存在一些问题。不要尝试向 validated_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)
    

    【讨论】:

      猜你喜欢
      • 2019-01-09
      • 2014-04-08
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      相关资源
      最近更新 更多