Django:将我串行化的对象嵌入到序列化器中?

时间:2017-02-10 03:28:04

标签: django django-rest-framework django-serializer

我想要嵌套我要序列化的对象。这就是我的意思:

我当前的UserSerializer:

class UserSerializer(serializers.ModelSerializer):
    posts = serializers.SerializerMethodField()
    class Meta:
        model = User
        fields = ('__all__')
    def get_posts(self, user):
        posts = Posts.objects.get_posts_for_user(user=user)
        return PostsSerializer(posts, many=True, context=self.context)

这是我的PostsSerializer:

class PostsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Posts
        fields = ('__all__')

以下是如何序列化的:&/ p>

{ "name": "Bobby Busche", 
  "email": "Bobby@gmail.com",
  "posts": [ {"from_user": "me", "message": "Hello World"},
             {"from_user": "me", "message": "Bye bye"} ],
  "username": "ilovemymomma"
}

但是我希望用户被分组到密钥" user"像这样:

{ "user": { "name": "Bobby Busche", 
             "email": "Bobby@gmail.com",
             "username": "ilovemymomma" }
  "posts": [ {"from_user": "me", "message": "Hello World"},
             {"from_user": "me", "message": "Bye bye"} ]

}

我需要一些关于什么是最佳执行方法的指导。

1 个答案:

答案 0 :(得分:2)

你可以像Rajesh指出的那样制作自定义序列化器。请注意,此序列化程序是只读的。

class UserPostsSerializer(serializers.BaseSerializer):

    def to_representation(self, instance):
        posts = Posts.objects.get_posts_for_user(user=instance)
        return {
            'user': UserSerializer(instance).data,
            'posts': PostSerialzer(posts, many=True).data
        }

然后,您需要从UserSerializer中删除posts字段,以便帖子也不会嵌套在那个帖子中。