【问题标题】:Django Rest Framework serializing nested dataDjango Rest Framework 序列化嵌套数据
【发布时间】:2018-06-04 17:48:50
【问题描述】:

我试图在这个序列化器中序列化数据,但我总是得到输出{}

这是我的序列化程序:

class RelationshipSerializer(serializers.ModelSerializer):

    user = UserSerializer(read_only=True)
    related_user = UserSerializer(read_only=True)

    class Meta:
        model = models.Relationship
        fields = (
            'user',
            'related_user',
        )

这是我的看法:

related_user_id = body["related_user"]
related_user = models.User.objects.get(id=related_user_id)

user = self.get_object()

user_serializer = serializers.UserSerializer(user).data
related_user_serializer = serializers.UserSerializer(related_user).data

# user_serializer and related_user_serializer return valid data.

data = {"user": user_serializer, "related_user": related_user_serializer}

serializer = serializers.RelationshipSerializer(data=data)

serializer.is_valid() # valid

return Response(serializer.data)

我从 post 请求中获取related_user 的 id,然后获取实际对象的查询集,user 是在 url 中传递的 id:user/{1}/。然后我序列化每个用户并创建一个字典以传递给RelationshipSerializer。序列化器返回有效但响应为{},我做错了什么?

【问题讨论】:

    标签: python django serialization django-rest-framework drf-queryset


    【解决方案1】:
    class RelationshipSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = models.Relationship
            fields = (
                'user',
                'related_user',
            )  
    

    views.py

    user = self.get_object()
    data = {"user": user.id, "related_user": request.data["related_user"]}
    
    serializer = serializers.RelationshipSerializer(data=data)
    if serializer.is_vaild():
        serializer.save()
    return Response(serializer.data)
    

    【讨论】:

    • 我想序列化字典,因为对象还不存在。所以我不能去objects.get。序列化后我要保存它
    • 试试 user = self.request.user
    • @Ykh 只有 id 不起作用,因为 user 和 related_user 应该有 UserSerializer 的嵌套值,而不仅仅是 Id
    猜你喜欢
    • 1970-01-01
    • 2017-12-03
    • 2018-02-17
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2017-07-28
    • 2016-12-30
    • 2015-03-20
    相关资源
    最近更新 更多